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.数字是负数,输出-,正数则不用理会。 2.判断指数部分为正还是为负

   ①若指数部分为负,输出"0."后根据指数部分的大小补0再输出原字符串的整数和小数部分即可。
   ②若指数部分为正,并且指数部分小于原字符串的精度,不需要补0,则先输出原字符串的整数部分以及小数点前的部分,再输出小数点及其之后的部分。
   ③若指数部分为正,并且指数部分大于原字符串的精度,需要补0,则先输出原字符串的整数及小数部分,再在其后补0即可。
个人所用的一些知识点复习:
  1.stringstream既可以便于一些题目中的输入操作,也可以用于字符串转int型。
  2.string下的substr方法,第一个参数表示开始截取字符串的位置,第二个参数表述截取的长度,如果截取长度超过该字符串的长度,则自动将字符串从截取位置开始全部截取。
  注意:如果截取开始位置超过字符串长度,程序会抛出异常:
   terminate called after throwing an instance of 'std::out_of_range'what():
 basic_string::substr
代码如下:
 #include<iostream>
#include<string>
#include<sstream> using namespace std; int main()
{
string a, flo, k;
stringstream k2;
char tail;
int m = , k1;
cin>>a;
/* 将小数部分存入 flo中 */
for( int i = ; i < a.length(); i++, m++){
if( a[i] == 'E')
break;
}
flo = a.substr(,m);
/* 将指数部分的符号存入tail中 */
tail = a[+m+];
/* 将指数部分的绝对值存入k1中 */
k = a.substr(+m+,a.length());
k2 << k;
k2 >> k1; if( a[] == '-' )
printf("-");
if( tail == '-' ){
printf("0.");
for( int i = ; i < k1 - ; i++)
printf("");
cout<<a[]<<flo<<endl;
}
else{
if(k1 < flo.length()){
string b = flo.substr(,k1);
string c = flo.substr(k1,flo.length());
cout<<a[]<<b<<"."<<c<<endl;
}
else{
cout<<a[]<<flo;
for( int i = ; i < k1-flo.length(); i++)
printf("");
}
}
return ;
}
这道题还有其他很多优秀的做法,比如字符串转数字可以使用stoi函数,但是由于不是标准库函数,就不一一写出来了。
    

PAT Basic 1024的更多相关文章

  1. PAT Basic 1024 科学计数法 (20 分) Advanced 1073 Scientific Notation (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  2. PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)

    PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...

  3. PAT Basic 1057

    1057 数零壹 给定一串长度不超过 10​5​​ 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有 ...

  4. PAT 乙级 1024

    题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...

  5. PAT (Basic Level) Practise (中文)-1039. 到底买不买(20)

    PAT (Basic Level) Practise (中文)-1039. 到底买不买(20) http://www.patest.cn/contests/pat-b-practise/1039 小红 ...

  6. PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)

    PAT (Basic Level) Practise (中文)-  1022. D进制的A+B (20)  http://www.patest.cn/contests/pat-b-practise/1 ...

  7. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  8. PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)

    PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)    http://www.patest.cn/contests/pat-b-practise/10 ...

  9. PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)

    PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)  http://www.patest.cn/contests/pat-b-practise/1027 本题 ...

随机推荐

  1. CATIA 使用技巧--转换出轻巧的tif格式文件

    问题描述: 我们在与客户和供应商打交道的过程中经常需要TIF格式2D图纸文件,而默认的CATIA设置保存出来TIF文件非常大,不利于保存和传送.对于该问题,我们可以通过修改CATIA的默认设置选项,将 ...

  2. Android 流量测试方法

    流量测试怎么测?下面总结了几个方法: 一.通过pid获取流量 > 1.获取应用的pid adb shell ps | grep packagename 2.通过pid获取该进程的流量信息 adb ...

  3. C8051F_CAN

    CAN总线特点:基于报文编码而非对节点编码,增删节点对系统没有影响,靠干扰稳定性好,速率高. 小工具:CANtool 收发器:CAN总线收发器CTM1050,通信速率1Mbps,至少可连接110个节点 ...

  4. D. Kay and Snowflake 树的重心

    http://codeforces.com/contest/686/problem/D 给出q个询问,每次要求询问以x为根的子树中,哪一个点是重心. 树的重心:求以cur为根的子树的重心,就是要找一个 ...

  5. Java反射 : Declared的作用 ( 例如 : getMethods和getDeclaredMethods )

    import com.tangcheng.learning.service.lock.annotation.KeyParam; import lombok.Data; import lombok.Eq ...

  6. php后端程序开发学习网站梳理

    博主只列举自己经常用到的: 看教学视频:慕课网,网易云课堂,百度传课 看博文和知识点:csdn 看源码:github 刷题:codewars 学习框架:thinkphp官网 下载相关资源:csdn 看 ...

  7. TLS、SSL、HTTPS以及证书

    转自:http://www.cnblogs.com/kyrios/p/tls-and-certificates.html 最近在研究基于ssl的传输加密,涉及到了key和证书相关的话题,走了不少弯路, ...

  8. 关于Retrofit + RxJava 的使用

    年前一个月到现在,一直都在忙一个项目.项目使用的三方框架还是蛮多的. 下面来总结一下自己使用Retrofit + RxJava的知识点吧. (以下讲述从一个请求的最初开始) 1.首先定义一个RxMan ...

  9. JavaScript 跨域请求

    1.最简单通用的做法就是 反向代理         通过nginx搭建一个反向代理服务器,通过将跨域的请求配置成转发:此方法适用于动静分离时,很多跨域请求的情况下: server { listen 8 ...

  10. java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类

    6.2 接口实例 6.2.1 接口与回调 在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,假如程序中有一个时钟,就可以请求每秒钟获得一个通告,以便更新时钟的表盘 ...