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



