pat乙级1024
来源:互联网 发布:movist for mac 编辑:程序博客网 时间:2024/06/06 19:14
科学计数法 (20)
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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
我前后写了两个版本,第一个可能有错
#include<iostream>#include<string>using namespace std;int main(){ string str; cin>>str; int i; int pose; int len=str.length(); for( i=0;i<len;i++){ if(str[i]=='E') pose=i; } if(str[0]=='-') cout<<'-'; int after=0; for( i=pose+2;i<len;i++){ after=(str[i]-'0')+10*after; } //以上为准备工作 if(str[pose+1]=='-'){ if(after>0){ cout<<"0."; for(i=1;i<after;i++){ cout<<"0"; } for(i=0;i<pose;i++){ if(str[i]>='0'&&str[i]<='9') cout<<str[i]; } }else{ cout<<"0."; for(i=1;i<pose;i++){ if(i==2-after) cout<<'.'; } if(str[i]>='0'&&str[i]<='9') cout<<str[i]; } } else{ if(pose-3<after){ //后续有0添加 if(str[1]!='0') cout<<str[1]; for(int i=3;i<pose;i++){ if(str[i]>='0'&&str[i]<='9'){ cout<<str[i]; } } for(i=0;i<after-(pose-3);i++){ cout<<'0'; } } else{ if(str[1]!='0') cout<<str[1]; for(i=3;i<pose;i++){ if(i==after+3) cout<<'.'; if(str[i]>='0'&&str[i]<='9') cout<<str[i]; } }} }
#include<iostream>#include<string>using namespace std;int main(){ string str; cin>>str; int i,pose; if(str[0]=='-') cout<<'-'; //该步缺失 int len=str.length(); //再找E的位置,只有E前面的数据有效,后面的只是判断0和.的位置 for(i=1;i<len;i++) if(str[i]=='E') pose=i; //由于e后面的数据存在 03这种类型需化成实际的数字 int after=0; for(i=pose+2;i<len;i++) after=(str[i]-'0')+10*after; //after不是累加的,而是实时变化的 if(str[pose+1]=='-'){ //注意是== if(after==0){ //注意是== for(i=1;i<pose;i++) cout<<str[i]; } else{ cout<<"0."; for(i=1;i<after;i++) cout<<'0'; for(i=1;i<pose;i++) if(str[i]>='0'&&str[i]<='9') cout<<str[i]; } } else{ //根据末尾加0还是中间加.来区分 if(after>pose-3){ if(str[1]!='0') cout<<str[1]; for(i=3;i<pose;i++){ if(str[i]>='0'&&str[i]<='9') cout<<str[i];} for(i=0;i<after-(pose-3);i++) cout<<'0'; } else{ if(str[1]!='0') cout<<str[1]; for(i=3;i<pose;i++){ if(i==after+3) cout<<'.'; if(str[i]>='0'&&str[i]<='9') cout<<str[i]; } } }}
0 0
- PAT乙级1024
- pat乙级1024
- PAT 乙级 1024
- PAT乙级1024
- PAT(乙级)1024 有理数四则运算(20)
- PAT乙级1024 科学记数法
- PAT乙级 1004. 成绩排名
- PAT乙级 月饼 (25)
- PAT乙级 人口普查(20)
- PAT 乙级 1020.月饼
- PAT乙级1001
- PAT乙级1002
- PAT 乙级 1028.人口普查
- PAT乙级1003
- pat乙级总结
- PAT乙级1010-月饼
- PAT乙级题解
- PAT 乙级 1001
- 交换瓶子 蓝桥杯
- Centos7 安装Mysql5.7
- SDN控制器-POX学习(一)
- bzoj 1782: [Usaco2010 Feb]slowdown 慢慢游 (线段树+DFS序)
- OC中char/short/int/float/double在64位系统中所占字节数
- pat乙级1024
- 版本管理-SVN冲突爆红后如何通过颜色和快捷键准确无误地合并代码(一)
- Gym
- 学习随笔——Java制作简单截图工具
- 【机房重构】——数据库设计
- c++primer第十四章c++代码重用(二)
- hql增删改查
- 快速排序
- pat乙级1022