数数

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;
}
原文地址:https://www.cnblogs.com/Staceyacm/p/10782125.html