while((scanf("%d", &n))!=EOF)解决超时问题

作者在 2012-03-19 20:28:19 发布以下内容
水仙花数
时间限制:1000 ms | 内存限制:65535 KB
描述

我们知道,如果一个数是水仙花数,当且仅当它的各位数字的三次方的和与这个数相等。
如153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3则153是水仙花数

输入

输入数据有若干组,每组一个三位数N(100<=N<=999)

输出

每组测试数据一行,如果这个数是水仙花数,则输出“Yes”,否则输出“No”.

样例输入 153 125 样例输出 Yes No 摘自:http://www.bianchengla.com/course/24/practise/problem?id=1677
#include<stdio.h>
#include<math.h>
int main()
{
    int n=0,a=0,b=0;
    while(scanf("%d",&a)
    {
        n=a;
        b=0;
        do
        {
            b=b+pow(a%10,3);
            a=a/10;
        }while(a);
        if(n==b)
        {
            printf("Yes\n");
        }
        else
        {
            printf("No\n");
        }
    }
    return 0;
}
运行超时。1002ms。 改了while里面的循环判断语句
#include<stdio.h>
#include<math.h>
int main()
{
    int n=0,a=0,b=0;
    while(scanf("%d",&a)!=EOF)/////////////
    {
        n=a;
        b=0;
        do
        {
            b=b+pow(a%10,3);
            a=a/10;
        }while(a);
        if(n==b)
        {
            printf("Yes\n");
        }
        else
        {
            printf("No\n");
        }
    }
    return 0;
}
运行时间3ms!
C/C++ | 阅读 8429 次
文章评论,共1条
vfdff
2012-08-05 11:07
1
就while(scanf(&quot;%d&quot;,&amp;a)!=EOF)/////////////性能差异这么明显?你用什么测试的<br />
<br />
是不是误差呀
游客请输入验证码
浏览48164次