zl程序教程

您现在的位置是:首页 >  其他

当前栏目

1073 Scientific Notation (20 分)【难度: 一般 / 知识点: 字符串 模拟】

知识点模拟 字符串 20 一般 难度
2023-09-11 14:15:52 时间

在这里插入图片描述
https://pintia.cn/problem-sets/994805342720868352/problems/994805395707510784

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    string s; cin>>s;
    if(s[0]=='-') cout<<"-";
    s=s.substr(1);
    if(s.find('-')!=-1)//左移
    {
        string ans;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]>='0'&&s[i]<='9') ans+=s[i];
            if(s[i]=='E') break;
        }
        int len=stoi(s.substr(s.find('-')+1));
        if(len==0)
        {
            for(int i=0;i<s.size();i++)
            {
                if(s[i]=='E') break;
                cout<<s[i];
            }
        }else
        {
            cout<<"0.";
            for(int i=1;i<=len-1;i++) cout<<"0";
            cout<<ans;
        }
    }
    else//右移
    {
         int len=stoi(s.substr(s.find('+')+1));//移动几位 
         string ans;//存一下有效的数字 
         for(int i=0;i<s.size();i++)
         {
            if(s[i]>='0'&&s[i]<='9') ans+=s[i];
            if(s[i]=='E') break;
         }
         string ss; ss+=ans[0];
         for(int i=1;i<ans.size();i++)
         {
             len--,ss+=ans[i];
             if(len==0&&i+1!=ans.size())//如果后面还有数
             {
                 ss+='.';
                 ss+=ans.substr(i+1);
                 break;
             }
         }
         while(len) ss+="0",len--;
         while(ss[0]=='0'&&ss.size()>1) ss=ss.substr(1);
         cout<<ss;
    }
    return 0;
}