Description
输入一些数,将这些数保留小数点后5位输出。
Input
数整数部分的长度和小数部分的长度均小于等于8。保证输入没有前导0。
多组测试,处理到文件末尾。
Output
输出保留小数点后五位的数。
Sample Input 1
0.123456
2
Sample Output 1
0.12345
2.00000
解题过程:
对于这道题,本来以为是道特别简单的送分题,直接输出%.5f就行,但是似乎和我想象的不太一样,在本地运行的时候已经自动进行了四舍五入,这是我的最初步思路。然后就想到-0.000005来控制四舍五入的问题,然后两个样例都过了,然后自信提交,但是很遗憾,依旧是WA,我就随机是输入了几组书,发现1的时候输出错误,0.99999。找到了不对的地方,于是又要进行修改,这次一种想法突然出现到我的脑海里,扩大再缩小,于是我int 定义一个数,让它等于输入数的100000倍,这样利用int的性质把五位后数的情况就给处理掉了,然后再用double 将int的数除100000,就解决了这个问题,然后提交,很遗憾,依旧WA,
这时我仔细看了看题,发现数的范围在做乘法运算时,会超了int的范围,于是改成了long long int ,成功ac
以下是AC代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double i;
long long int t;
while(scanf("%lf",&i)!=EOF)
{t=i*100000;
double s;
s=t*1.0/100000;
printf("%.5f
",s);
}
return 0;
}