科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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
NOTE:
1.利用字符数组输入,找到符号“+”、“-”,字母“E"
2.计算指数
3.若数为负,则输出符号”-“
4.当指数为负的时候,对应输出
5.当指数为正的时候,有两种情况,
第一种(测试点4):指数 n小于小数部分长度,其结果还会保留小数,只是小数点往后移了n位
第二种:指数n大于小数部分 ,其结果为整数,不会出现小数点
6.数组开大点(测试点6)
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[10001];
cin>>a;
int n=0,len,i=2,e=0,flag=0;
len=strlen(a);
while (i<len)
{
if (a[i]=='+'||a[i]=='-')
{
if (a[i]=='+')
flag=1;
else
flag=0;
e=i-1;//e为‘E’所在下标
for (int j=i+1; j<len; j++)
{//计算n,n为指数,保留位数
n*=10;
n+=(a[j]-'0');
}
break;
}
i++;
}
if (a[0]=='-')cout<<a[0];
if (flag==0)//指数为负
{
cout<<"0.";
for (int j=1; j<n; j++)
cout<<"0";
cout<<a[1];//不能把中间的小数点输出来
for (int j=3; j<e; j++)
{
cout<<a[j];
}
}
else if (flag==1)//指数n为正 注意还要分为两种情况
{
cout<<a[1];
if (n<e-3) //指数 n小于小数部分长度,
{ //其结果还会保留小数,只是小数点往后移了n位
for (int j =3; j<n+3; j++)
cout<<a[j];//输出整数部分
cout<<".";
for (int j=n+3; j<e; j++)
cout<<a[j];
}
else //指数n大于小数部分
{ //其结果为整数,不会出现小数点
for (int j=3; j<e; j++)
{
cout<<a[j];
}
for (int j=e-3; j<n; j++)
cout<<"0";
}
}
return 0;
}