【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系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#else
    freopen("1.txt", "r", stdin);   //从1.txt输入数据
#endif
	char 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;                       
}

发布了22 篇原创文章 · 获赞 2 · 访问量 490

猜你喜欢

转载自blog.csdn.net/weixin_43849089/article/details/104906348