题目粗心:

对于给定一个迷信计数法模式的数字,要求将其批改为一般数字示意的模式,并且要求将其无效位都保留。

算法思路:

因为指数局部的绝对值不超过9999,阐明应用double无奈存储该数字了,只能应用字符串或者字符数组,这里采纳字符串的形式进行解决,迷信计数法的数字能够分为无效局部加上指数局部,其分割线为字符E。咱们应用indexOfE保留其E字符的地位,subString保留无效局部的绝对值,接下来就是依据指数的正负来判断是小数点往左还是往右挪动了,咱们应用sgn_expo保留指数的正负,true为正,应用expo保留指数的绝对值,最初对于其输入后果应用result保留,初始为保留该数字的符号。result的获取办法如下:

1、指数为正数,小数点向左挪动,也就是在左侧增加expo个0。

首先增加"0.",而后再增加expo-1个0,最初再增加subString去除小数点的局部。
比方+1.23400E-03取得result的办法为,""->"0."->"0.000"->"0.000123400".

2、指数为负数,小数点向右挪动,该状况分为2种。
咱们应用rest_len示意无效局部中小数点后的局部长度

2.1、如果rest_len>expo,阐明小数点向右挪动后,仍然存在(小数点在expo地位),那么就先增加无效局部的第一位subString[0],再从小数点前面增加expo位字符subString.substr(2,expo) ,接着就是增加小数点,最初增加剩下来的无效局部subString.substr(2+expo)
比方:-1.23E+1取得result的办法:"-"->"-1"->"-12"->"-12."->"-12.3"。

2.2、如果rest_len<expo,阐明小数点向右挪动后,就不存在小数点了,那么就将无效局部的小数点去掉,赋值给result后,再增加expo-rest_len个0就好。
比方:-1.2E+10取得result的办法为:"-"->"-12"->"-12000000000"

提交后果:
AC代码:
#include<cstdio>#include<string>#include <iostream>using namespace std;int main(){    string s;    cin>>s;    bool isPositive = s[0]=='+';//记录该数字的正负    //找到E的地位    int indexOfE;    for(indexOfE=1;indexOfE<s.size();++indexOfE){        if(s[indexOfE]=='E') break;    }    //截取1到indexOfE之间的字符串    string subString = s.substr(1,indexOfE-1);    // 获取指数的符号和大小    bool sgn_expo = s[indexOfE+1]=='+';//true代表为正    int expo = stoi(s.substr(indexOfE+2));// 指数的绝对值    string result = isPositive?"":"-";//后果字符串    // 依据指数的符号判断小数点向左挪动还是向右挪动    if(!sgn_expo){        //指数为正数,小数点向左挪动        result += "0.";        //增加expo-1个0        for (int i = 0; i < expo - 1; ++i) {            result += "0";        }        //而后增加subString去除小数点的局部        result += subString[0]+subString.substr(2);    } else{        // 指数为负数,小数点向右挪动        int rest_len = subString.length()-2;//小数点后的局部长度        if(rest_len>expo){            //小数点仍然存在            result += subString[0]+subString.substr(2,expo)+"."+subString.substr(2+expo);        } else{            //小数点不存在,在前面补充expo-rest_len个0            result += subString[0]+subString.substr(2);            for (int i = 0; i < expo-rest_len; ++i) {                result += "0";            }        }    }    cout<<result;    return 0;}