1024 科学计数法

mac2026-06-12  15

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

总结:

属于模拟计算一类,主要是判断 E 的下标、指数是否为负数,以及当指数为正数的时候,小数点的情况该如何判断。

代码:

#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { string textNum, num; cin >> textNum; if( textNum[0] == '-' ) { printf("-"); } int index_E, exponent = 0; for(index_E=1;textNum[index_E]!='E';index_E++) { // 统计数字字符,并且得到 E 的下标 if( textNum[index_E]!='.' ) num += textNum[index_E]; } for(int j=index_E+2;j<textNum.length();j++) { exponent = (textNum[j]-'0') + exponent * 10; // 计算指数的值 } if( textNum[index_E+1]=='-' ) { // 当指数为负值的时候,在数值前输出固定数的 0 printf("0."); for(int i=0;i<exponent-1;i++) { printf("0"); } cout << num; } else { int cnt = index_E-3; // 统计小数点后,数字的个数 if(exponent >= cnt) { // 当指数的值大于小数点之后数字位数的时候,说明没有小数点输出 cout << num; // 先输出 数字字符之后,在之后 补0 for(int i=0;i<exponent-cnt;i++) // 应输出 0 的个数 printf("0"); } else { // 当有小数点输出的时候 int i; for(i=0;i<=exponent;i++) { // 先输出整数部分,指数 + 1 位 printf("%c",num[i]); } printf("."); // 输出小数点 for(;i<num.length();i++) { // 输出小数部分 printf("%c",num[i]); } } } printf("\n"); return 0; }

 

最新回复(0)