结尾无空行
输出样例:
153
370
371
407
结尾无空行
参考答案
答案1(部分正确)
#include<stdio.h>
#include<math.h>
int main()
{
int ishuahua(int n,int num);
int n,start=1,end,N;
//输入在一行中给出一个正整数N(3≤N≤7)
scanf("%d",&n);
N=n;
while(--n)
{
start*=10;
}
end=start*10-1;
while(start<=end)
{
if(ishuahua(N,start)) printf("%d\n",start);
start++;
}
}
int ishuahua(int n,int num)
{
int digit=num,total=0;
while(num)
{
total+=pow(num%10,n);
num/=10;
}
if(digit==total) return 1;
else return 0;
}
7位的无法通过,原因貌似是计算速度太慢....超时了.但是没有告知Run time
Custom Test 的Compiler's Log 看不懂
尝试在本地机上的vs2010跑n=7时用了13秒多,当n=6时就是瞬间完成,估计是算法太烂了........
答案2
#include<stdio.h>
int main()
{
int ishuahua(int n,int num);
int n,start=1,end,N;
//输入在一行中给出一个正整数N(3≤N≤7)
scanf("%d",&n);
N=n;
while(--n)
{
start*=10;
}
end=start*10-1;
while(start<=end)
{
if(ishuahua(N,start)) printf("%d\n",start);
start++;
}
}
int ishuahua(int n,int num)
{
int mypow(int x,int n);
int digit=num;
double total=0;
while(num)
{
total+=mypow(num%10,n);
num/=10;
}
if(digit==total) return 1;
else return 0;
}
int mypow(int x,int n)
{
if(n) return x*mypow(x,--n);
else return 1;
}
答案2虽然通过了,
但是我很疑惑,本地机vs2010测试的时间结果是要远远慢与使用系统的pow()函数的结果的.
使用自定义mypow()函数,7位数时,耗时高达45s,远高于答案1的13秒..........................
在线环境是:
为什么出现了完全相反的时间变化,Who can tell me why????