2016计蒜之道初赛第三场----百度的科学计算器【模拟】
来源:互联网 发布:淘宝店怎么弄淘客 编辑:程序博客网 时间:2024/05/21 00:55
百度有一款非常方便的在线应用——科学计算器。这个计算器可以接受科学记数法表示的数作为输入。
在科学记数法中,一个数被写成一个实数 aaa 与一个 101010 的 nnn 次幂的积:
a∗10na * 10 ^ na∗10n
其中 nnn 是一个整数,aaa 是一个实数且 1≤∣a∣<101 \leq |a| < 101≤∣a∣<10。在计算器的输入中,使用eee 来表示 101010 的幂。比如
1.5e5
的值为 1.5∗1051.5 * 10^51.5∗105。
3.2e-6
的值为 3.2∗10−63.2 * 10^{-6}3.2∗10−6。
科学计算器在进行计算之前,要先对用户输入的数进行简化。简化的过程是将科学记数法表示的数转换成与之等价的长度 最短 的科学记数法表示。
输入格式
输入只有一行,输入一个长度不超过 100100100 的科学记数法表示的浮点数。保证输入的合法性。
输出格式
输出一行,表示简化后的科学记数法表示的浮点数。
样例输入1
02.0e-5
样例输出1
2e-5
样例输入2
+1.101e+00
样例输出2
1.101e0
提示信息
请确保输出的结果也依然是合法的科学记数法表示。
思路:e的两端是两个需要去掉前导0和后置0的两个数,我分成了两种情况考虑,一种是带小数点的浮点数处理,也分成两部分去做,一个是小数点前的去前导0,一个是去小数点后的后置0。然后将两个串都处理了,输出。另一种是没有小数点的数处理,这个不需要处理后置0的问题,只需要处理前导0即可。
注意处理符号。
AC代码:
#include<stdio.h>#include<string.h>using namespace std;char a[5000];char ans[5000];char ans2[5000];int main(){ while(~scanf("%s",a)) { int n=strlen(a); int mid; for(int i=0;i<n;i++) { if(a[i]=='e') { mid=i;break; } } int biaoji=-1; for(int i=0;i<mid;i++) { if(a[i]=='.') { biaoji=i; } } if(biaoji==-1) { int flag=0; int ffff=0; for(int i=0;i<mid;i++) { if(a[i]=='-') { flag=1; continue; } if(ffff==0&&a[i]=='0')continue; else { ffff=1; if(a[i]=='+') { ffff=0; continue; } if(flag==1) { printf("-"); flag=0; } printf("%c",a[i]); } } } else { int ffff=0; int flag=0; for(int i=0;i<biaoji;i++) { if(a[i]=='-') { flag=1; continue; } if(ffff==0&&a[i]=='0'&&a[i+1]!='.')continue; else { ffff=1; if(a[i]=='+') { ffff=0; continue; } if(flag==1) { flag=0; printf("-"); } printf("%c",a[i]); } } ffff=0; char ans[500]; int cont=0; for(int i=mid-1;i>biaoji;i--) { if(ffff==0&&a[i]=='0')continue; else { ffff=1; if(a[i]=='+') { ffff=0; continue; } ans[cont++]=a[i]; } } if(ffff==1) printf("."); for(int i=cont-1;i>=0;i--) { if(ans[i]=='+')continue; printf("%c",ans[i]); } } printf("e"); biaoji=-1; ///////////////////after e for(int i=mid;i<n;i++) { if(a[i]=='.')biaoji=i; } if(biaoji==-1) { int flag=0; int ffff=0; for(int i=mid+1;i<n;i++) { if(a[i]=='-') { flag=1; continue; } if(a[i]=='0'&&ffff==0)continue; else { ffff=1; if(a[i]=='+') { ffff=0; continue; } if(flag==1) { printf("-"); flag=1; } printf("%c",a[i]); } } if(ffff==0) { printf("0"); } printf("\n"); } else { int gg1=0; int fff=0; int flag=0; for(int i=mid+1;i<biaoji;i++) { if(a[i]=='-') { flag=1;continue; } if(a[i]=='+')continue; if(fff==0&&a[i]=='0'&&a[i+1]!='.')continue; else { if(flag==1) { printf("-"); flag=0; } fff=1; gg1=1; printf("%c",a[i]); } } fff=0; char ans[500]; int cont=0; for(int i=n-1;i>biaoji;i--) { if(fff==0&&a[i]=='0')continue; else { fff=1; if(a[i]=='+') { fff=0; continue; } ans[cont++]=a[i]; } } int gg=0; if(fff==1) { printf("."); for(int i=cont-1;i>=0;i--) { if(ans[i]=='+')continue; gg=1; printf("%c",ans[i]); } } if(gg==0&&gg1==0) { printf("0"); } printf("\n"); } }}
0 0
- 2016计蒜之道初赛第三场----百度的科学计算器【模拟】
- 2017 计蒜之道 初赛 第二场 百度的科学计算器(简单)
- 2017 计蒜之道 初赛 第二场 B.百度的科学计算器(简单)
- 2017 计蒜之道 初赛 第二场 B. 百度的科学计算器(简单)
- 2016 计蒜之道 初赛 第三场 百度帐号的选取方案(中等) KMP
- 2017计蒜之道初赛_百度的科学计算器(简单难度)
- 2017 计蒜之道 初赛 第三场
- 2017 计蒜之道 初赛 第三场 A+B
- 2017 计蒜之道 初赛 第三场
- 2017计蒜之道初赛第二场-百度的年会游戏
- 2017 计蒜之道 初赛 第二场 A题(百度的年会游戏)
- 2017 计蒜之道 初赛 第三场-A. 腾讯课堂的物理实验
- 2017 计蒜之道初赛第三场 A.腾讯课堂的物理实验
- 2017 计蒜之道 初赛 第三场 A. 腾讯课堂的物理实验
- 2017 计蒜之道 初赛 第一场 阿里的新游戏(找规律,几何,模拟)
- 2017 计蒜之道 初赛 百度的年会游戏(模拟)
- 2016 计蒜之道 初赛 第二场(待补)
- 2016 计蒜之道 初赛 第五场
- 客户端访问https站点(自定义证书)--续
- Fatal error: Class 'GearmanClient' not found解决方法
- iOS算法篇(一)快速排序算法
- 【hibernate进阶】hibernate
- oc 实现五子棋游戏
- 2016计蒜之道初赛第三场----百度的科学计算器【模拟】
- 解决TCP网络传输“粘包”问题
- 丢失DLL文件,并非全都下载相关DLL就能解决的,千万别被百度误人子弟
- 快速搭建Web环境 Angularjs + Express3 + Bootstrap3
- header('Content-type:text/html;charset = utf-8');出现中文乱码
- C++第七次实验--素数和回文
- 实验:C++实验7 项目二
- 2.数据结构--线性表之链表实现
- TCP和UDP的"保护消息边界"