首页 > 其他 > 详细

PAT乙级1024

时间:2019-08-06 22:31:46      阅读:95      评论:0      收藏:0      [点我收藏+]

题目链接

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/

欢迎讨论和交流!


PAT乙级1024

原文:https://www.cnblogs.com/chouxianyu/p/11311999.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!