【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];
        }
    }
}
posted @ 2021-03-03 15:34  Hyx'  阅读(68)  评论(0)    收藏  举报