B1024/A1073. 科学计数法 (20)
来源:互联网 发布:ubuntu系统软件位置 编辑:程序博客网 时间:2024/05/18 16:35
1.题目描述
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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
2.解题过程
第一遍代码如下:
/*B1024*/#define NUM 10000#include<cstdio>#include<cstring>int main(){ int e = -1; //记录e的位置 int f = -1; //记录小数点的位置 int m = 0; //记录指数 bool flag = true; //指数为正是true,指数为负是false bool flag2 = true; //数为正是true,负是false char a[NUM]; gets(a); int length = strlen(a); if(a[0]=='-'){ flag2 = false; } for(int i=0;i<length;i++){ if(a[i]=='E'){ e = i; } if(a[i]=='.'){ f = i; } if(e!=-1&&a[e+1]=='-'){ flag = false; } } //提取指数 for(int i=e+1;i<length;i++){ if(a[i]=='+'||a[i]=='-') continue; else{ m = m*10 + (a[i]-'0'); } } if(flag){ //指数为正 if(flag2){ //数为正 if(a[0]!='+') printf("%c",a[0]); else printf("%c",a[1]); }else{ //数为负 printf("%c%c",a[0],a[1]); } int i; for(i=f+1;i<e&&m;i++){ printf("%c",a[i]); m--; } if(m==0){ if(i<e) printf("."); for(i;a[i]!='E';i++){ printf("%c",a[i]); } }else{ //末尾添0 while(m){ printf("0"); m--; } } }else{ //指数为负 printf("0."); m--; while(m){ printf("0"); m--; } for(int i=0;a[i]!='E';i++){ if(a[i]=='.') continue; else printf("%c",a[i]); } } return 0;}
错误分析:
在数和指数都为负数是的输出格式中没有忽略原来的“-”号,情况如下:
修改部分代码:
else{ //指数为负 if(!flag2){ //数为负 printf("-"); } printf("0."); m--; while(m){ printf("0"); m--; } for(int i=0;a[i]!='E';i++){ if(a[i]=='.'||a[i]=='-'||a[i]=='+') continue; else printf("%c",a[i]); } }
提交后结果全部正确。
3.基础知识复习
由于长时间不用C语言编程,很多基本编程规则已经淡忘,因此每题最后将设计的基础知识进行简单罗列,以便之后复习。
1)printf输出
%d整数 %ld长整型long %lld双长整型long long
%c输出一个字符
%s输出一个字符串
%f以小数形式输出实数,包括单、双精度、长双精度
%m.nf输出数据占m列,其中小数n列,四舍五入
%-m.nf输出数据向左对齐,右端空格补足
%e以指数形式输出,默认数字部分小数位6位,指数部分5列,空格补足eg: 1.23e+002(数的前面有4个空格)
%o以八进制整数形式输出
%x以十六进制形式输出整数
2)gets()
接收一个字符串末尾会自动添加‘\0’
只能以回车键作为分割符
可以包含转义字符
读取字符串直到换行符结束,换行符会被丢弃然后加上‘\0’
3)strlen()
使用时记得加头文件#include cstring
- PAT---B1024/A1073. 科学计数法 (20)
- B1024/A1073. 科学计数法 (20)
- B1024. 科学计数法 (20)
- PAT B1024或A1073 科学计数法 有空必须再做的
- PAT-B1024.科学计数法
- PAT乙级练习题B1024.科学计数法
- 科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- PAT1024科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- 1024. 科学计数法 (20)
- 正则案例
- Java+Selenium3方法篇36-如何模拟组合键输入
- 胖五加油!作为程序员_该如何去挽救一个失败的项目?
- centos6.5 安装配置vsftpd
- win10下 asp环境
- B1024/A1073. 科学计数法 (20)
- Redis的安装、服务配置
- jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
- 解析c++中的重载问题
- Hit Tolerance——hit容差
- 媒体转码,你不得不知道的一些事
- Javap的使用与类文件结构
- SSH整合的程序
- libc++abi.dylib`__cxa_throw: 使用[AVAudioPlayer play]会产生__cxa_throw异常