加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

1024 科学计数法(20 分)

发布时间:2020-12-14 06:15:55 所属栏目:百科 来源:网络整理
导读:科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9] . [0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数 A

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

输入格式:

每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

输出格式:

对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

输入样例 1:

+1.23400E-03

输出样例 1:

0.00123400

输入样例 2:

-1.2E+10

输出样例 2:



-12000000000
#include <iostream>
#include <string>
#include <iomanip>
#include <math.h>
using namespace std;
 
int main ()
{
    string inStr,subStr1,subStr2;  //分别记录输入的字符串,小数部分和指数部分
    char flag;   // 指数的符号
    int pos;   // 记录‘E‘字符的位置
    cin>>inStr;
    if(- == inStr[0])
        cout<<"-";  // 小数符号位
    pos = inStr.find(E);//找到e所在的位置
    subStr1 = inStr.substr(1,pos-1);//将小数部分保存下来,从1开始复制pos-1个字符
    flag = inStr[pos+1];
    subStr2 = inStr.substr(pos+2,inStr.size()-2-pos);//将指数部分保存下来
    int n = stoi(subStr2);//将指数部分转为int型
    subStr1.erase(subStr1.find(.),1);//删除从‘.‘开始的1个字符‘
    int len = subStr1.size();//保存下来小数部分的长度
    if(+ == flag )  {//如果指数符号为正数,就看指数位是不是比小数长度小,如果小于
    //就在n+1处插入1个.如果不是就在小数后面加上n+1-len个0
        if(n>=0 && n<len-1)
            subStr1.insert(n+1,1,.);
        else
            subStr1.insert(len,n-len+1,0); 
        cout<<subStr1;
    }
    else {//如果符号位为负数,如果是0个就在原来的位置加上.,如果不是0,就在前面加n-1个0,再在前面加上0.
        if(0 == n) {
            subStr1.insert(1,.);
            cout<<subStr1;
        }
        else {
          cout<<"0."<<setfill(0)<<setw(len+n-1)<<subStr1;
        }
    }
 
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读