PAT (Basic Level) Practice 1024 科学计数法 (20分)

#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
    string s,num;
    int E_index,fre;
    cin >> s;
    E_index=s.find('E');                //E的下标   
    num=s.substr(3,E_index-3);          //小数点后的数字
    fre=stoi(s.substr(E_index+1));      //指数
    if(s[0]=='-')
        cout<<'-';
    if(fre>=0)                          //指数大于等于0,右移
        {  
            if(num.size()<=fre)         //指数大于等于 小数点后的数字位数
                {
                    cout<<s[1]<<num;    //输出整数s[1],再输出num
                    for(int i=0;i<fre-num.size();i++)//如果指数大于小数的位数,则需要补(指数-小数位数)0
                        cout << 0;                   //例如+1.2345E6 先输出1 再输出2345 再补(6-4)个0
                }
            else                         //指数小于 小数点后的数字位数
                cout <<s[1]<< num.substr(0,fre) << "."  << num.substr(fre,num.size()-fre); 
        //输出整数s[1]和指数个小数位  再输出.  再输出剩余小数 
        //例如  +1.23456E4 先输出1 再输出指数个(4位)小数位,即2345  再输出.  最后输出其余小数6      
        }
    else                                 //指数小于0,左移
        {
            cout <<"0.";                //先输出0.
            for(int i=0;i<-fre-1;i++)   //再补指数-1个0
                cout << "0";
            cout << s[1] << num;        //再输出小数部分
        }                               //例如 +1.2345E-6 先输出0.  再输出6-1个0  再输出小数部分
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super__Bb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值