PAT---B1024/A1073. 科学计数法 (20)
来源:互联网 发布:养生的软件 编辑:程序博客网 时间:2024/05/04 09:48
题目要求:
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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>using namespace std;int main(){ string s; cin >> s; int E_place=0; if(s[0]== '-') cout <<s[0]; while(s[E_place]!='E') // E_place即为输入的字符串中E的位置 E_place++; //使用exponent来存储E后的字符串换算成10进制的数,即用来存储科学计数法的指数 //这步的计算先不论正负号,正负号稍后讨论 int exponent = 0; for(int i = E_place+2;i<s.length();i++) exponent = exponent*10+(int)s[i]-'0'; //如果指数是负数,则对刚刚计算的值取相反数 if(s[E_place+1] == '-') exponent = -exponent; //根据指数为正负或者是0来判断该如何输出 if(exponent == 0) { for(int i=1;i<E_place;i++) cout <<s[i]; } else if(exponent <0) { cout <<"0."; for(int i=0;i<-exponent-1;i++) cout <<"0"; cout <<s[1]; for(int i=3;i<E_place;i++) cout <<s[i]; } else { for(int i=1;i<E_place;i++) { if(s[i] == '.') continue; cout <<s[i]; //需要在exponent+2处打印小数点,但又不能在一个数的最后一位打印小数点(最后一位就是exponent等于小数的位数,小数的位数就是E_place-3) if((i == exponent+2)&&(E_place-3!=exponent)) cout <<'.'; } for(int i=0;i<exponent-(E_place-3);i++) cout <<"0"; } return 0;}
附加:本人在网上又看到了另一种解题的方法,然而PAT系统检测有监测点错误,本人苦思冥想也无从解决,因此本人将这串代码在此贴出,望各位看官看到后能给予您宝贵的意见
#include <iostream>#include <stdio.h>#include <cstring>using namespace std;int main(){ char str[11000]; cin >>str; int length = strlen(str); int E_place = 0; if(str[0]=='-') cout <<"-"; while(str[E_place]!='E') E_place++; int exponent = 0; //exponent 为科学记数法的指数 for(int i = E_place+2;i<length;i++) exponent = exponent*10+str[i]-'0'; if(exponent == 0) { for(int i=1;i<E_place;i++) cout <<str[i]; } else if(str[E_place+1]=='-') { cout <<"0."; for(int i=0;i<exponent-1;i++) cout <<"0"; cout <<str[1]; for(int i=3;i<E_place;i++) cout <<str[i]; } else { for(int i=1;i<E_place;i++) { if(str[i] == '.') continue; cout <<str[i]; if(i == E_place+2&&exponent-3!=E_place) cout <<"."; } for(int i=0;i<exponent-(E_place-3);i++) cout <<"0"; } return 0;}
0 0
- PAT---B1024/A1073. 科学计数法 (20)
- B1024/A1073. 科学计数法 (20)
- PAT B1024或A1073 科学计数法 有空必须再做的
- PAT-B1024.科学计数法
- B1024. 科学计数法 (20)
- PAT乙级练习题B1024.科学计数法
- 浙大 PAT 1024. 科学计数法 (20)
- PAT 1024. 科学计数法 (20)
- PAT乙级 科学计数法 (20)
- PAT(Basic Level) 科学计数法 (20)
- PAT-乙级-1024. 科学计数法 (20)
- PAT(B) - 1024. 科学计数法 (20)
- Java - PAT - 1024. 科学计数法 (20)
- PAT乙级.1024. 科学计数法 (20)
- PAT乙级 1024. 科学计数法 (20)
- PAT 乙级 1024. 科学计数法 (20)
- PAT-B 1024. 科学计数法 (20)
- PAT 乙级 1024. 科学计数法 (20)
- gradle-releaseTheDeploy-uat.sh
- 创建学生表、班级表以及添加外键添加简单代码
- 豆瓣电影爬虫初探
- novatar-webapp.launch.tpl
- set-env.bat_bak
- PAT---B1024/A1073. 科学计数法 (20)
- Windows查找端口命令
- set-env.sh
- css3模拟jq点击事件
- set-env-uat.sh
- java中把数字转换为货币格式的方法及保留数位的问题
- settings.gradle
- 将int数组转换为整数
- 创建对象之-工厂模式