【1073 20 字符串】 Scientific Notation
传送门
题意
给出科学计数法的格式的数字\(A\),要求输出普通数字表示法的\(A\),并保证所有效位都被保留,包括末尾的\(0\)
数据范围
\(sizeof(A)<9999 \;bytes\)
\(exponent \leq 9999\)
题解
- 不需要考虑前导\(0\),没有这样的测试数据
- 即将包含
.的所有数字提取出来,指数转化为int - 指数负数,在\(0.\)后添加指数-1个\(0\),然后输出原字符串所有数字即可
- 指数正数,需要根据指数和小数上数字的位数来补充\(0\)
Code
#include<bits/stdc++.h>
using namespace std;
int main(){
string n; cin>>n;
int p=0;
if(n[0]=='-') cout<<'-';
while(n[p]!='E') p++;
int ex=stoi(n.substr(p+1));
string s=n.substr(1,p-1);
if(ex<0){
cout<<"0.";
for(int i=0;i<abs(ex)-1;i++) cout<<"0";
for(int i=0;i<s.size();i++) if(s[i]!='.') cout<<s[i];
} else {
cout<<s[0];
int cnt,i;
for(i=2,cnt=0;i<s.size() && cnt<ex;i++,cnt++) cout<<s[i];
if(i==s.size()) for(int j=0;j<ex-cnt;j++) cout<<'0';
else {
cout<<'.';
for(int j=i;j<s.size();j++) cout<<s[j];
}
}
}

浙公网安备 33010602011771号