• 1024 科学计数法(20 分)


    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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, 1, '.');
                cout<<subStr1;
            }
            else {
              cout<<"0."<<setfill('0')<<setw(len+n-1)<<subStr1;
            }
        }
     
        return 0;
    }
  • 相关阅读:
    HelloWorld入门程序
    再写博客
    iOS--小结系列一
    iOS--ARC
    ios--block
    iOS--protocol
    iOS--内存管理
    指针基本概念
    ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
    ZooKeeper系列之九:ZooKeeper API简介及编程
  • 原文地址:https://www.cnblogs.com/fromzore/p/9556549.html
Copyright © 2020-2023  润新知