PAT乙级—1024. 科学计数法 (20)-native
2016-05-08 22:32
316 查看
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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后面的所有字符所代表数字,+-分别用两个变量behind_E_plus,behind_E_minus保存,对于-的情况则一定是在原字符串前面添加0,且一定是添加 behind_E_minus个,用数组保存起来这些0,在加上原字符串中E之前的纯数字,且在第一个元素之后加小数点(此种情况第一个元素之后一定有小数点),对于+的情况要考虑小数点之后E之前的元素个数count和behind_E_plus的关系,如果count<=behind_E_plus则不输出小数点,输出原字符串纯数字之后再添加behind_E_plus-count个0,如果count>behind_E_plus,输出原字符串behind_E_plus+1个字符后加一个小数点,再输出剩下元素,以上所有输出要判断原字符串开头是否有-,若果有,则输出时加上即可。
题目链接:
https://www.patest.cn/contests/pat-b-practise/1024
现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留。
输入格式:
每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。
输出格式:
对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。
输入样例1:
+1.23400E-03
输出样例1:
0.00123400
输入样例2:
-1.2E+10
输出样例2:
-12000000000
思路:输入字符串,对字符串进行解析,分别求出E后面的所有字符所代表数字,+-分别用两个变量behind_E_plus,behind_E_minus保存,对于-的情况则一定是在原字符串前面添加0,且一定是添加 behind_E_minus个,用数组保存起来这些0,在加上原字符串中E之前的纯数字,且在第一个元素之后加小数点(此种情况第一个元素之后一定有小数点),对于+的情况要考虑小数点之后E之前的元素个数count和behind_E_plus的关系,如果count<=behind_E_plus则不输出小数点,输出原字符串纯数字之后再添加behind_E_plus-count个0,如果count>behind_E_plus,输出原字符串behind_E_plus+1个字符后加一个小数点,再输出剩下元素,以上所有输出要判断原字符串开头是否有-,若果有,则输出时加上即可。
#include<iostream> #include<cstring> using namespace std; int main() { string a; char b[100000]; cin>>a; int j=0; int behind_E_plus=0; //保存E+之后所有字符所代表数字 int behind_E_minus=0; //保存E-之后所有字符所代表数字 int e=0; for(int i=0;i<a.length();i++) //计算 E+,E-之后所有字符所代表数字 { if(e==1) { behind_E_plus=behind_E_plus*10+(a[i]-'0'); } if(e==2) { behind_E_minus=behind_E_minus*10+(a[i]-'0'); } if(a[i-1]=='E'&&a[i]=='+') e=1; if(a[i-1]=='E'&&a[i]=='-') e=2; } if(behind_E_minus!=0) //如果输入的是E-的情况 { for(int i=0;i<behind_E_minus;i++) //先在b数组中添加behind_E_minus个0 { b[j++]='0'; } for(int i=0;i<a.length();i++) //再添加原字符串E之前纯数字 { if(a[i]=='E') break; if(a[i]>='0'&&a[i]<='9') b[j++]=a[i]; } for(int i=1;i<j;i++) //输出,如果原字符串开头有-加上 { if(i==1&&a[0]=='-') cout<<"-"; if(i==1) cout<<b[0]<<"."; //第一个元素之后家小数点 cout<<b[i]; } } else //如果输入的是E+的情况 { int count; //记录小数点之后有多少位 bool begin=false; //是否开始记录小数点之后有多少位 for(int i=0;i<a.length();i++) //算出小数点之后E之前有多少位以及在b数组中保存原字符串纯数字 { if(a[i]=='E') break; if(begin) count++; if(a[i]=='.') begin=true; if(a[i]>='0'&&a[i]<='9') { b[j++]=a[i]; } } //在最后添加0,若behind_E_plus<=count则不用添加 for(int i=0;i<behind_E_plus-count;i++) { b[j++]='0'; } if(behind_E_plus-count<0) //如果behind_E_plus<count,先输出behind_E_plus+1 { //个元素,然后输出小数点,再输出剩下的元素 if(a[0]=='-') cout<<"-"; int k=0; for(int i=0;i<(behind_E_plus)+1;i++) { cout<<b[i]; k=i; } cout<<"."; for(int i=k+1;i<j;i++) { cout<<b[i]; } } else //如果behind_E_plus>=count则不用输出小数点 { for(int i=0;i<j;i++) { if(i==0&&a[0]=='-') cout<<"-"; cout<<b[i]; } } } return 0; }
题目链接:
https://www.patest.cn/contests/pat-b-practise/1024
相关文章推荐
- 第一阶段绩效评估
- 用oracle语句计算百分比
- 机器学习第九周作业使用R语言建立BP神经网络
- C#下listview如何插入图片
- 基于struts2的留言板系统&简单实现jdbc分页
- mariadb卸载
- 20145302张薇《Java程序设计》第十周学习总结
- 20150408--Sphinx+邮件激活-01
- OpenCV将连续图片合成视频AVI
- 学习PS基础教程
- Android之Activity
- Hibernate的关联映射之N-N关联映射 .
- scikit出现Reshape your data either using X.reshape(-1, 1) if your
- Java StringBuilder 和 StringBuffer 源码分析
- Android屏幕适配攻略
- 日志框架的宏观设计
- hdu3966 Aragorn's Story【树链剖分+线段树】
- 周赛题
- opengl 法向量变换矩阵推导
- 电脑是不会骗你的