zoukankan      html  css  js  c++  java
  • PAT乙级1024

    题目链接

    https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168

    题解

    第一遍也是没有全部AC,有3个测试点没过,原因如下:

    1. 没有处理指数为0的情况
    2. 指数为正时,没有处理不需补充0而需插入小数点的情况。(经过https://blog.csdn.net/whenever5225/article/details/90454014提示才知道的)

    修改后全部都AC了。

    整体的思路是获取整数和小数数值部分,然后获取指数,最后进行小数点的移动。

    // PAT BasicLevel 1024
    // https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    int getExponent(string);
    int main()
    {
        // 原始字符串和结果
        string str,result;
        cin >> str;
    
        // 获取结果的符号
        string flag = (str[0] == '-' ? "-" : "");
    
        // E在原始字符串中的下标
        int eIndex = str.find_last_of('E');
    
        // 获得指数的值
        int exponent = getExponent(str.substr(eIndex + 1, str.length()));
    
        // 从原始字符串获取整数和小数部分的数值,现在小数点在result中的下标为1
        result = str[1]+str.substr(3, eIndex-3);
        
        // 根据指数进行小数点的移动
        if(exponent>0){
            // 判断是否需要补充0
            int numOfZero = exponent - (result.length() - 1);
    
            // 在尾部补充0
            if(numOfZero>=0){
                for (int i = 0; i < numOfZero; i++){
                    result += '0';
                }
            }
            // 不需补充0,而是需要插入小数点
            else{
                result.insert(result.begin()+exponent+1,'.');
            }
            
        }else if(exponent<0){
            // 在首部补充0(for循环少补了一个0,这个少补的0在添加小数点时补上)
            exponent*=-1;
            for(int i=0;i<exponent-1;i++){
                result.insert(result.begin(),'0');
            }
    
            // 添加小数点
            result="0."+result;
        }else{
            // 添加小数点
            result.insert(result.begin()+1,'.');
        }
        
    
        // 输出结果
        cout << flag+result;
    
        //system("pause");
        return 0;
    }
    
    int getExponent(string str)
    {
        int flag=str[0]=='+'?1:-1;
        int num=0;
        for(int i=1;i<str.length();++i){
            num=num*10+str[i]-'0';
        }
        return flag*num;
    }
    

    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    字符数组初始化
    makefile学习笔记
    convert between char* and std::string
    mysql 学习笔记(二)
    面试中的Singleton (转)
    由谈退格键的实现来学习字符编码
    mysql 学习笔记(一)
    Eclipse插件的安装方法
    Http状态码
    net use命令
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/11311999.html
Copyright © 2011-2022 走看看