当前位置: 代码迷 >> 综合 >> PATB 1024 科学计数法(20 分)/PATA 1073 Scientific Notation(20 分)
  详细解决方案

PATB 1024 科学计数法(20 分)/PATA 1073 Scientific Notation(20 分)

热度:79   发布时间:2023-12-25 03:31:19.0

思路分析:
指数为负和正分两种情况讨论;输入格式受限,可在scanf()函数中按固定格式输入;
注意:指数为正时,指数exp小于系统有效位个数的情况;段错误出现的原因:输入字符串数组设置需大于“数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。”

#include"stdio.h"
#include<string.h>
const int maxn = 20000;
int main()
{char str[maxn];int i = 0, j = 0, exp = 0;scanf("%s", str);if (str[0] == '-') printf("-");while (str[i] != 'E') i++;j = i + 2;while (j < strlen(str)) {exp = exp * 10 + (str[j]-'0');j++;}if (str[i + 1] == '+') {printf("%c", str[1]);j = 3;while (j < i || exp>0) {while (j < i) {if (exp > 0) {if (str[j] != '.') printf("%c", str[j]);j++;exp--;}else if (exp == 0) {printf(".");exp--;}else {if (str[j] != '.') { printf("%c", str[j]); }j++;}}while (exp > 0) {printf("0");exp--;}}}if(str[i+1]=='-'){bool flag = false;j = 1;if (exp == 0) {printf("%c.", str[j]);j++;}while(j<i) {if (exp > 0 ) {if (flag==false) {printf("0.");flag = true;exp--;}else {printf("0");exp--;}}else{if(str[j]!='.') printf("%c", str[j]);j++;}}}printf("\n");return 0;
}

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

  相关解决方案