CodeForces 691C Exponential notation
2016-07-27 20:37
489 查看
题目:
Description
You are given a positive decimal number x.
Your task is to convert it to the "simple exponential notation".
Let x = a·10b, where 1 ≤ a < 10, then in general case the "simple
exponential notation" looks like "aEb". If b equals to zero, the part "Eb" should be skipped. If a is
an integer, it should be written without decimal point. Also there should not be extra zeroes in a and b.
Input
The only line contains the positive decimal number x. The length of the line will not exceed 106. Note
that you are given too large number, so you can't use standard built-in data types "float", "double" and other.
Output
Print the only line — the "simple exponential notation" of the given number x.
Sample Input
Input
Output
Input
Output
Input
Output
Input
Output
因为x是大于0的,所以很容易求得最左边的和最右边的非0数字,不会出现什么意外。
求小数点的位置的时候,如果不存在小数点,就假设在末尾增加一个小数点,也就是dot初始化为strlen(c)
最后输出E后面的内容的时候还挺有意思的,2种情况表达式不一样。
代码:
Description
You are given a positive decimal number x.
Your task is to convert it to the "simple exponential notation".
Let x = a·10b, where 1 ≤ a < 10, then in general case the "simple
exponential notation" looks like "aEb". If b equals to zero, the part "Eb" should be skipped. If a is
an integer, it should be written without decimal point. Also there should not be extra zeroes in a and b.
Input
The only line contains the positive decimal number x. The length of the line will not exceed 106. Note
that you are given too large number, so you can't use standard built-in data types "float", "double" and other.
Output
Print the only line — the "simple exponential notation" of the given number x.
Sample Input
Input
16
Output
1.6E1
Input
01.23400
Output
1.234
Input
.100
Output
1E-1
Input
100.
Output
1E2
因为x是大于0的,所以很容易求得最左边的和最右边的非0数字,不会出现什么意外。
求小数点的位置的时候,如果不存在小数点,就假设在末尾增加一个小数点,也就是dot初始化为strlen(c)
最后输出E后面的内容的时候还挺有意思的,2种情况表达式不一样。
代码:
#include<iostream> using namespace std; char c[1000002]; int main() { cin.getline(c, 1000002); int l = strlen(c); int start = -1, end = -1; int dot = l; for (int i = 0; i < l; i++) { if (c[i] == '.')dot = i; else if (c[i] != '0') { if (start < 0)start = i; end = i; } } cout << c[start]; if (start != end) { cout << "."; for (int i = start + 1; i <= end; i++) { if (i != dot)cout << c[i]; } } if (dot>start + 1)cout << "E" << dot - start - 1; if (dot < start)cout << "E" << dot - start; return 0; }
相关文章推荐
- CSS 学习笔记思维导图版
- EasyUI 网页边框布局
- freemarker的应用
- Ubuntu下boot分区剩余空间不足解决
- 5.3 编写一个程序,显示用户输入的一个日期是该年度的第几天。
- POJ 2965 The Pilots Brothers' refrigerator (DFS)
- CodeForces 534C
- DAY02_CTF经验
- pride mp3
- 前端常用到的颜色值和长度值设置
- Ubuntu下软件的搜索与安装
- 网易彩票,转盘实现
- POJ 2503 Babelfish(STL-map)
- Crossed Ladders<poj2507题目一样>
- eclipse svn插件展示作者、修改日期等label
- c++内联函数(inline)使用详解
- ubunutu16.4 64位安装arm-linux-gcc交叉编译器
- LINUX下安装软件的集中方法
- codeforces 140C New Year Snowmen
- 2016暑假集训7.27 链表 数据结构上机测试1:顺序表的应用