乙级 1024 科学计数法"/>
【PTA刷题整理】PAT 乙级 1024 科学计数法
2020.03.16 今天的题目是一种我不能灵活处理应对的题型,解决的过程中参考了几个博客的文章,感觉真的涨了不少知识,这个题目以后还要重做一次,这里附上大佬的链接
PAT B 1024 科学计数法(C语言)*16行代码搞定
1024 科学计数法 (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
首先是这个科学计数法怎么接收怎么处理的问题,想过用字符串来接受然后进行对正负号、E、小数点进行特判,再使用for循环输出,中间插入E的个数,对小数点的位置进行调整,但是这样肯定不是最优的做法
在很多博客看到了使用正则来接收这个科学计数法,说实话这个知识点我并不熟悉(要去看书了),所以第一时间根本就想不出来,即便题目都说了这几个字了
具体的题解可以看上文贴的链接,对三元运算符的运用实在佩服
scanf("%[^E]E%d", n, &index);
也有用普通转义符的
scanf("%d.%[0-9]E%d",&d,Dec,&e);
#include<iostream> //输入输出流头文件
#include<stdio.h> //标准输入输出
#include<stdlib.h>
#include<math.h> //数学函数
#include<string.h> //C语言字符数组的字符串
#include<algorithm> //C++标准模板库的函数
#include<map> //map映射容器
#include<unordered_map> //无序的map映射容器
#include<vector> //变长数组容器
#include<queue> //队列
#include<stack> //栈
#include<string> //C++string类
#include<set> //set集合
using namespace std; //标准命名空间//可以加入全局变量或者其他函数int main(){ //主函数
#ifdef ONLINE_JUDGE //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#elsefreopen("1.txt", "r", stdin); //从1.txt输入数据
#endifchar Dec[10000];int e , d;scanf("%d.%[0-9]E%d",&d,Dec,&e);if(d < 0){cout << "-";}int counter = 0;while(e++ < 0){cout << "0";if(counter == 0){cout << ".";}counter++;}e--;cout << abs(d);for(int i = 0; i < strlen(Dec) || i < e; i++){printf("%s%c",i==e && !counter ? ".":"",i<strlen(Dec) ? Dec[i] : '0');}return 0;
}
更多推荐
【PTA刷题整理】PAT 乙级 1024 科学计数法
发布评论