1073 Scientific Notation (20分)

本文介绍了一种使用C++实现的科学计数法转换算法,该算法能够处理三种情况:在数字前补0,数字后补0,以及移动小数点。通过解析输入字符串,确定指数部分,并根据指数调整数值部分的位置,最终输出转换后的科学计数法表示。

三个情况,前面补0,后面补0,中间移小数点

#include <bits/stdc++.h>

using namespace std;

int main(){
    string s;
    cin>>s;
    bool neg=false;
    int b;
    auto posE=s.find('E');
    string s1=s.substr(0,posE);
    string s2=s.substr(posE+1);
    b=stoi(s2);
    if(b==0){
        if(s1[0]=='+')s1.erase(0,1);
        printf("%s",s1.c_str());
        return 0;
    }
    if(s1[0]=='+')s1.erase(0,1);
    else if(s1[0]=='-'){
        neg=true;
        s1.erase(0,1);
    }

    if(s1.size()!=1)s1.erase(1,1);

    int aimP=1+b;

    if(aimP<=0){
        s1.insert(0,-aimP,'0');
        s1="0."+s1;
    }else if(b+1>=s1.size()){
        s1.insert(s1.end(),-s1.size()+b+1,'0');
    }else{
        s1.insert(1+b,1,'.');
    }
    if(neg)s1="-"+s1;
    printf("%s",s1.c_str());
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值