思路:
1.先看最前面的正负号。
2.找到E。
3.根据E后面跟着的符号进行分类,主要判断小数点往哪移动,或者是否需要补小数点。
4.如果是负号,则必然要补0和小数点;
反之,如果是正号,则要判断需要移动的小数点位数是否大于后面的长度(用来判断是否需要小数点)移动的时候利用数组逐项移动,若要去除最后一个多余的,未被覆盖的数,用pop.back()即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string science,num;
cin>>science;
if(science[0]=='-') cout<<'-';
int bit=0,i=0,w=0;
while(science[++i]!='E')
{
num+=science[i];
bit++;
}
int temp=i;
while(science[temp+2]!='\0')
{
w=w*10+(science[temp+2]-'0');
temp++;
}
if(science[++i]=='-')
{
for(int j=0;j<w;j++)
{
num='0'+num;
}
for(int j=w;j>=1;j--) num[j+1]=num[j];
num[1]='.';
}
else if(science[i]=='+')
{
if(w>=bit-2)
{
for(int j=2;j<2+w;j++) num[j-1]=num[j];
num.pop_back();
for(int k=1;k<=w-bit+2;k++)
num+='0';
}
else if(w<bit-2)
{
for(int j=2;j<2+w;j++) num[j-1]=num[j];
num[1+w]='.';
}
}
cout<<num;
return 0;
}
第一个错误(检测点2,6答案错误):后面的指数不一定只有两位,也可能为更大的数字。
第二个错误(检测点5段错误):这玩意为啥是段错误。
似乎知道为啥了,我输入+9.34E+971时pta测试台显示堆栈溢出了,查一查为什么。
测试出来指数极限似乎是55。超出55就会溢出。
不行,还是整不明白。麻了。