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;
}