C语言 判断一个数是否为水仙花数
代码如下,输入55,算出来是48,77就是正常的98,输入153、154、155算出来都是217,无法正常计算请问这是怎么回事?
#include <stdio.h>
#include <math.h>
int function(int n);
int main()
{
int n;
scanf("%d", &n);
printf("%d", function(n));
}
int function(int n)
{
int sum, k, p, q, j, m, l;
int s = n;
for(p=1, q=0; p<n; p*=10)
{
if (n/p>0)
q++;
}
for (j=pow(10, q-1), sum=0; j>=1; j/=10)
{
l=n/j;
m=pow(l, q);
sum+=m;
n=n%j;
}
if(sum == s)
printf("yes");
else
return sum;
}
if(sum == n)到这里时,n已经在循环中被你改掉了啊。再for循环前,再定义一个变量等于n,比如 int s = n;然后if(sum==s)才行
可以参考以下代码
#include <stdio.h>
int main()
{
int narcissistic( int number );//调用函数声明
int number;
scanf("%d",&number);
if(narcissistic(number))
printf("%d是水仙花数\n",number);
else
printf("%d不是水仙花数\n",number);
return 0;
}
//主要判断函数
int narcissistic( int number )
{
int i=1,sum=0,num,k,j; //i:数字的位数,sum:各位n次方之和,num=number,k和j用来算每位的n次方,n就是数字的位数
int a[10];
num = number;
a[0] = number%10; //将数字的各位存到a[0]中
while(number>10) //如果数字大于10,将数字的每位存到a[]数组中
{
number=number/10;
a[i] = number%10;
i++;
}
for(k=0; k<i; k++) //将每位的n次方存在a[]数组中
{
int temp=a[k];
for(j=0; j<i-1; j++) ;
a[k] = a[k]*temp;
}
while(i>0) //计算各位n次方之和
{
sum+=a[i-1];
i--;
}
if(num == sum) //是水仙花数返回1,否则返回0
return 1;
else
return 0;
}
void PrintN( int m, int n )
{
int i;
for(i=m+1; i<n; i++)
{
if(narcissistic(i))
printf("%d\n",i);
}
}
提供一个计算多位水仙花数的代码,供参考:
#include <stdio.h>
#include <math.h>
int main()
{
int N, i, p, t, sum, n, m, k;
printf("input num(3<= N <=7):");
scanf("%d", &N);
for (i = pow(10, N - 1), p = i * 10; i < p; i++) {
for (sum = 0, t = i; t > 0; t /= 10) {
m = N; k = 1;
n = t % 10;
while (m--)k *= n;
sum += k;
}
if (sum == i)
printf("%d\n", i);
}
return 0;
}