Description
如果一个n位数的每个数位的n次方和就是本身,那么我们称这种数为“水仙花数”。比如371,33+73+13=27+343+1 = 371。现给你一个数,请求这个数是否是水仙花数。
输入
有多组样例。每个样例占一行,为一个整数a(1<=a <=1,000,000),如果a为 0,那么表示输入结束,这个样例不需要处理。
输出
每行输出一个样例的结果,如果是就输出“Yes”,否则输出“No”。
Sample Input
1 370 371 600000 700000 0Sample Output
Yes Yes Yes No No
解题思路: 读题。
一觉醒来 pow() 函数都不能用了,让我找了半天错哪了(请按照oj对应的语言版本编写代码)
AC代码:
数字计算型:
#include <stdio.h>
// #include <math.h>
int Long(int a)
{
int n;
for ( n = 0; a > 0; n ++, a/=10);
return n;
}
int Pow(int t,int index)
{
int n = 1;
for (int i = 0; i < index; i ++)
n *= t;
return n;
}
int main()
{
int a,t,n,num;
while (scanf("%d",&a) != EOF && a != 0)
{
num = 0;
n = Long(a);
for (int i = a; i > 0; i /= 10)
{
t = i % 10;
num += Pow(t,n);
}
if (num == a)
puts("Yes");
else
puts("No");
}
return 0;
}
字符转换型:
#include <stdio.h>
// #include <math.h>
#include <stdlib.h>
#include <string.h>
int Pow(int t,int n)
{
int num = 1;
for (int i = 0; i < n; i ++)
num *= t;
return num;
}
int main()
{
int a,len,t,n,num;
char str[10];
while (scanf("%d",&a) != EOF && a != 0)
{
num = 0;
itoa(a,str,10);
len = strlen(str);
for (int i = 0; i < len; i ++)
{
t = str[i] - '0';
n = Pow(t,len);
num += n;
}
if (num == a)
puts("Yes");
else
puts("No");
}
return 0;
}