习题5-6 使用函数输出水仙花数
发现运行不出结果#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
int narcissistic( int number ){
int x,num;
int count1=0,count2=1;
int sum=0;
num=number;
while(num>0){
count1+=1;
num/=10;
}
do{
x=number%10;
for(count2;count2<count1;count2+=1){
x*=x;
}
sum+=x;
number/=10;
}while(number>0);
if(sum==number) {
return 1;
}
else{
return 0;
}
}
void PrintN( int m, int n ){
m+=1;
for(m;m<=n;m+=1){
if(narcissistic(m)==1){
printf("%d\n",m);
}
}
}
{:10_266:}
输入样例:153 400
输出样例:
153 is a narcissistic number
370
371 附上以前做过的代码
int narcissistic( int number )
{
int i,t,p,c=0,n,sum=0;
p=number;
n = number;
while(n)
{
c++;
n/=10;
}
for(i=1;;i++)
{
t=p%10;
p=p/10;
sum+=pow(t,c);
if(t==0&&p==0)break;
}
if(number==sum)return 1;
else return 0;
}
void PrintN( int m, int n )
{
int i;
m++;
for(i=m;i<n;i++)
if(narcissistic(i))printf("%d\n",i);
} 你第一个函数number最后是0跟sum是不可能相等的 循环内写错了
for(count2 = 0; count2 < count1; count2 += 1) {
x *= x;
}
占楼,修改下你的代码 修改好了。
int narcissistic( int number ) {
int num = number, t = number;// t用于最后比较 num用于计算长度 number用于求sum
int count1 = 0;//计算number长度
while(num>0) {
count1+=1;
num/=10;
}
int sum = 0;//计算累加和
do {
int x, temp;// x用来计算n次方 temp保存原来的值 如153 中如 3 首先x=temp=3 x = 9 temp=3 x=27, temp=3
x = temp = number%10;
for(int count2 = 1; count2<count1; count2+=1) {
x*=temp;
}
sum+=x;
number/=10;
} while(number>0);
if(sum==t) {
return 1;
} else {
return 0;
}
}
void PrintN( int m, int n ) {
m+=1;
for(m; m<n; m+=1) {
if(narcissistic(m)==1) {
printf("%d\n",m);
}
}
}
页:
[1]