P 1024 科学计数法
转跳点:
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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
这道题可有意思了,我都被逼的去学了一点正则表达式(原本不想用正则的,但写到一半发现太麻烦,就不写了(捂脸),果然我还是个菜菜)。这道题除了输入之外,没有太多难的地方,就是注意正负号,和小数位的保留。
我代码压缩了一下,时间方面不太理想。(为什么要精简代码?可能我脑子有坑吧)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #define MAXSIZE 10000
5
6 int main(void)
7 {
8 int Integer, Exponent, count = 0;
9 char Decimal[MAXSIZE];
10
11 scanf("%d.%[0-9]E%d", &Integer, &Decimal, &Exponent); //正则表达式输入(瞎逼逼,就是格式化输入,呃用了一点点正则)
12 printf("%s", Integer < 0 ? "-" : ""); //处理正负号,预防小于 0 的 小数
13 while (Exponent++ < 0) //如果指数小于0,先输出指数的个数
14 {
15 printf("0%s", count++ == 0 ? "." : "");
16 }
17 Exponent--; //0 -> Exponent, 所以-1
18 printf("%d", abs(Integer)); //输出第一位
19 for (int i = 0; i < strlen(Decimal) || i < Exponent; i++)
20 { //0 -> Exponent,两个终止条件一个是保留小数位数,一个是整数补齐科学计数法的小数部分0不够补0
21
22 printf("%s%c", i == Exponent && !count ? "." : "", i < strlen(Decimal) ? Decimal[i] : '0');
23 }
24
25 return 0;
26 }
我原本写了一个60来行的代码,发现太长,就放弃了,没用正则,果然代码短看起来就是舒服。(使劲浪费时间,看不见)
下面这个就是正则的部分
%d.%[0-9]E%d
其实吧,用到正则的就只有这里 %[0-9]E 这里表示从 . 到 E 之间是数字 0~9 的字符都会存储下来,还有,正则表达式本来就是用来处理字符串的,不要问我为什么,自行度娘,详细的正则表达式的用法我会在额外更一篇博客的,(等我学完再说)
PTA不易,诸君共勉!
P 1024 科学计数法的更多相关文章
- PAT乙级 1024. 科学计数法 (20)
1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...
- PAT-乙级-1024. 科学计数法 (20)
1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...
- C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. PAT Bas ...
- PAT 1024 科学计数法 (20)(精简版代码+思路+推荐测试样例)
1024 科学计数法 (20)(20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+, ...
- PAT乙级 1024. 科学计数法 (20)(未通过全部测试,得分18)
1024. 科学计数法 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 科学计数法是科学家用来表示很 ...
- PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...
- PAT——1024. 科学计数法
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位 ...
- PAT 1024. 科学计数法 (20)
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位 ...
- PAT 1024 科学计数法
https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168 科学计数法是科学家用来表示很大或很小的数字的 ...
随机推荐
- lnmp1.5安装swoole
php7.2安装swoole-4.0.1.tgz php5.6安装swoole-1.10.4.tgz wget http://pecl.php.net/get/swoole-4.0.1.tgz ...
- django 自定义模版过滤器
自定义的模版过滤器必须要放在app中,并且该app必须在INSTALLED_APPS中进行安装.然后再在这个app下面创建一个python包叫做templatetags(这个名字是固定的,不能随意更改 ...
- Unity3d fbx纹理不显示 原因
Unity3d 导入fbx文件后纹理不显示(3ds Max中显示正常) 原因: 1.纹理图片没有导入fbx同一文件夹中 2.纹理图片没有在fbx文件之前导入(现导入纹理图片,再导入fbx文件)
- ROS-3 : Catkin工作空间和ROS功能包
一.创建一个Catkin工作空间 步骤一:构建catkin工作空间 安装完成ROS版本后,设置好环境变量:$ source /opt/ros/kinetic/setup.bash.然后即可创建一个ca ...
- 201706 gem 'rails-erd'生成Model关系图
[工具]一张图理清各个model之间关系 安装 Graphviz 2.22+: 终端机中执行 brew install graphviz Gemfile中添加 gem 'rails-erd' 终端机中 ...
- 在linux7(centos)中安装python3.7.2
一般情况下linux上都默认安装了python,检查一下我的版本 没有安装python3,但是目前已经是python3了,所以为了方便,还是要在系统上安装一下比较好. 上面的命令,直接输入python ...
- springboot官网->application.properties文件
springboot application.properties 2.1.6.RELEASE
- jenkins#安装jenkins
1. 访问官网下载地址https://jenkins.io/zh/download/ 2. 选择自己的平台,然后按照文档进行操作: 主要按照文档来,下面是我按照文档按照的一个记录 #访问 https: ...
- 7个现在就该学习Python 的理由【80%的人都不知道】
Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎. 诚然,它有点老了,但仍是 80 后啊 —— 至少没有 C ...
- UVA - 1600 Patrol Robot (巡逻机器人)(bfs)
题意:从(1,1)走到(m,n),最多能连续穿越k个障碍,求最短路. 分析:obstacle队列记录当前点所穿越的障碍数,如果小于k可继续穿越障碍,否则不能,bfs即可. #pragma commen ...