题目描述
科学计数法模拟题
样例
0.5e3
500
0.0e0
0
3.5e2
350
算法1
C++ 代码
#include<bits/stdc++.h>
using namespace std;
string a,b,ans,temp,ans_1;
int len,x1,b1,x3;
int main(){
cin>>a;
len=a.length();
for(int i=0;i<len;i++){
if(a[i]=='e') x1=i; //x1取e前部分
}
b=a.substr(x1+1); b1=stoi(b);//b1为小数点要移动几位
ans=a.substr(0,x1); //将e前部分取出来
for(int i=ans.length()-1;i>=0;i--){
if(ans[i]=='.'){
x3=i-1; break;
}
else if(ans[i]!='0'){
x3=i; break;
}
}//对e前部分数进行预处理,把末尾多余的0去除(遗漏的部分)
ans=ans.substr(0,x3+1);
int x2=ans.find(".");//看看预处理后还有没有小数点
if(x2==string::npos){
for(int i=1;i<=b1;i++) ans.push_back('0');
cout<<ans<<endl;
}//没有小数点根据b1补0即可
else{
ans_1=ans.substr(0,x2);//将小数点前部分取出
temp=ans.substr(x2+1); //将小数点后部分取出
int len_2=temp.length();
//根据小数点后位数判断最终结果有没有小数点
if(len_2>b1){
for(int i=0;i<len_2;i++) {
if(i==b1) ans_1.push_back('.');
ans_1.push_back(temp[i]);
}
}
else{
ans_1=ans_1+temp;
for(int i=1;i<=b1-len_2;i++) ans_1.push_back('0');
}
//最后一部分处理,将前导0取出,比如0.5e3=0500==500
int len_3=ans_1.length();
for(int i=0;i<len_3;i++) {
if(ans_1[i]=='0'&&ans_1[i+1]!='.') continue;
else{
len_3=i; break;
}
}
ans_1=ans_1.substr(len_3);
cout<<ans_1<<endl;
}
return 0;
}