洛谷P2393 yyy loves Maths II 卡精度 输入优化

来源:互联网 发布:1855美国大亨 知乎 编辑:程序博客网 时间:2024/06/06 05:48

题目大意:给一些实数(50000个以内,不超过233333333),小数点后不超过六位,求和,输出保留五位

果然我太鶸了,WA得死去活来。。。。这题只要用double就必WA无疑,由于小数点后不会很长,所以直接用数组模拟就好。然后是爆INT,接着WA,改成unsigned long long又因为没四舍五入,还WA。。。反正最后终于是艰难地AC了

自己的代码:

#include<cstdio>using namespace std;typedef unsigned int uint;unsigned long long sa,a;uint sb[6];char c;int main(){    while(1)    {        a=0;        do        {            c=getchar();            if(c==EOF) goto end;        }while(c<'0'||c>'9');        while(c>='0'&&c<='9')        a=a*10+c-'0',c=getchar();        sa+=a;        if(c=='.')        {            a=0;c=getchar();            while(c>='0'&&c<='9')            sb[a++]+=c-'0',c=getchar();        }    }    end:        for(int i=5;i;i--)        if(sb[i]>10)        sb[i-1]+=sb[i]/10,sb[i]%=10;        if(sb[0]>10)        sa+=sb[0]/10,sb[0]%=10;        if(sb[5]>4)        sb[4]++;        printf("%llu.%u%u%u%u%u",sa,sb[0],sb[1],sb[2],sb[3],sb[4]);    return 0;}
0 0
原创粉丝点击