科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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; }