科学计数法 (分析)

1024 科学计数法 (20 分)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

输入格式:

每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

输出格式:

对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

输入样例 1:

+1.23400E-03

输出样例 1:

0.00123400

输入样例 2:

-1.2E+10

输出样例 2:

-12000000000

分析:1、分两种情况进行,是小数还是整数,这一点是由E后面符号的正负来决定的。

           2、第一种情况,E后面是负号,所以应该在最前面加0,然后在第一个零的后面加上小数点。第二种情况E后面是正号,则应该在后面加0,这时我们还需要在考虑两种情况,E后面的数字的绝对值小于前面的数字位数,此时我们需要在前面数字部分的某个位置加小数点,如果超过则在后面加上(E后面数字的个数减去前面数字个数加1)个0。

           3、为了代码的简洁性,我们针对想要实现的功能采用了一些函数,大大缩减了代码量。

               1.(atoi()函数c/c++的标准库函数,功能是把字符串转化为整型;

                2. 包含在头文件string(c++)中的一些函数

                      substr(int n,int length)从下标为n 开始截取length长度的字符串,这个函数是字符串常用函数;

                      append()常用的几种形式:str1.append(str2)添加str2到str1的后面

                                                                  str1.append(str2, 11, 7)添加str2的第11个字符开始的之后7个字符

                                                                  str1.append(5, '0')str1后面添加5个"0"

                       insert()常用的几种形式:str.insert(6,str2)在str下标为6的地方插入str2
                                                                str.insert(6,str3,3,4) 在str下标为6的地方插入 str3从下标为3开始的4个字符 
                                                                str.insert(10,str4,8)在str下标为10的地方插入str4的前8个字符

代码如下:

#include<iostream>
#include<string>
using namespace std; 
int main(){
    string str;
    cin>>str;
    if(str[0]=='-')cout<<"-";
    int finger = atoi(str.substr(str.find('E')+1).data()); //把E之后的字符转化为整型保存
    string fro = str.substr(1,1); //保存下标为1的位置字符
    string mid = str.substr(3,str.find('E')-3);//保存下标为3到E之前的字符
    string mai = fro+mid; //保存的是E之前的数字部分
    string ans;
    if(finger<0){
        ans.append((-1*finger),'0');//在当前字符串结尾添加abs(finger)个字符0
        ans.append(mai);
        ans.insert(1,".");
        cout<<ans;
    }else if(finger<mai.length()-1){
        mai.insert(finger+1,".");
        cout<<mai;
    }else{
        mai.append(finger-mai.length()+1,'0');
        cout<<mai;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41679818/article/details/84860259
今日推荐