1024. 科学计数法 (20)
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
HOU, Qiming
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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
/* 学了几个C++处理字符串的常用函数 1. strtok 分割字符串 2. atof() 将字符串转化为数值 */ #include "iostream" #include "vector" #include <string.h> using namespace std; int main() { int len; vector<char*>v; char str[20005]; char *p; cin >> str; p = strtok(str,"E"); /* 将字符串按E分割 */ while (p != NULL) { v.push_back(p); p = strtok(NULL, "E"); } len = strlen(v[0]); /* 记录v[0]的长度 */ int offset = atof(v[1]); /* 记录小数点要偏移的位数 */ if (v[0][0] == '-') /* 第一个元素为负号 输出*/ cout << "-"; if (offset == 0) { cout << v[0]; } else if (offset < 0) { /* 指数为负数 */ for (int i = 0; i < -offset; i++) { if (i == 0) cout << "0."; else cout << "0"; } for (int i = 1; i < len; i++) { if (v[0][i] == '.') continue; else cout << v[0][i]; } } else { /* 指数为正数 */ int k=0; for (int i = 1; i < len; i++) { /* 改变小数点的位置 */ if(v[0][i]!='.'){ cout << v[0][i]; k++; } if ((k - 1 == offset) && (k != len -2)) { cout << "."; } } /* 输出需要添加的零 */ while (k <= offset) { cout << "0"; k++; } } cout << endl; }