1024 科学计数法 (20 分)测试点2,3,4

测试点2,3,4卡的是E后面是+的情况
主要卡的是+的情况,题目不难,用substr截取出E前后的东西,然后根据情况输出即可,具体代码里有解释

#include<iostream>
#include<string>
#include<algorithm>
#include<sstream>
using namespace std;
void change(string k,int &result)//这里计算E后面的数有是多少
{
    stringstream t;
    t<<k;
    t>>result;
}
int main()
{
    string num,headnum,lastnum;
    int last;
    int lastflage=0;
    getline(cin,num);
    int index=num.find('E');
    if(num[0]!='+'){
        cout<<"-";
    }//判断是不是-是-的先输出出来
    if(num[index+1]=='+'){
        lastflage=1;
    }//标记一下E后面是正是负
    headnum=num.substr(1,index-1);//截取E前面的
    lastnum=num.substr(index+2,num.size()-1);//截取E后面的
    change(lastnum,last);//计算E后面的有多少
    if(lastflage==0){
        if(last>0){
            cout<<"0.";
        }//如果是-的,且E后面的数大于0,肯定是0.xxx所以先输出0.
        for(int i=1;i<last;i++){
            cout<<0;
        }//然后输出移动的N个0
        for(int i=0;i<headnum.size();i++){
            if(headnum[i]!='.'){
                cout<<headnum[i];
            }
        }//然后输出剩下的数
    }else{
        cout<<headnum[0];//因为这样一定是正的先输出第一位
        int i,j;s//分别统计用掉了last几个,输出了几个字符
        for(j=2,i=0;j<headnum.size()&&i<last;j++,i++){
            cout<<headnum[j];
        }//输出小于last的last个字符
        if(j==headnum.size()){
            for(j=0;j<last-i;j++){
                cout<<"0";
            }//如果j刚好把这个数输完了,然后看last剩下的还有没有如果有输出0
        }else{
            cout<<".";//如果没有输出完,说明剩下的肯定是小数点后面的了,就输出一个.
            for(;j<headnum.size();j++){
               cout<<headnum[j];
            }//继续吧后面的字符输出出来
        }

    }
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值