鱼C论坛

 找回密码
 立即注册
查看: 960|回复: 5

[已解决]习题5-6 使用函数输出水仙花数

[复制链接]
发表于 2020-8-10 20:25:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发现运行不出结果
  1. #include <stdio.h>

  2. int narcissistic( int number );
  3. void PrintN( int m, int n );

  4. int main()
  5. {
  6.     int m, n;

  7.     scanf("%d %d", &m, &n);
  8.     if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
  9.     PrintN(m, n);
  10.     if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

  11.     return 0;
  12. }

  13. int narcissistic( int number ){
  14.         int x,num;
  15.         int count1=0,count2=1;
  16.         int sum=0;
  17.         num=number;
  18.         while(num>0){
  19.                 count1+=1;
  20.                 num/=10;
  21.         }
  22.         do{
  23.                 x=number%10;
  24.                 for(count2;count2<count1;count2+=1){
  25.                         x*=x;
  26.                 }
  27.                 sum+=x;
  28.                 number/=10;
  29.         }while(number>0);
  30.        
  31.         if(sum==number) {
  32.                 return 1;
  33.         }
  34.         else{
  35.                 return 0;
  36.         }
  37. }

  38. void PrintN( int m, int n ){
  39.         m+=1;
  40.         for(m;m<=n;m+=1){
  41.                 if(narcissistic(m)==1){
  42.                         printf("%d\n",m);
  43.                 }
  44.         }       
  45. }
复制代码




输入样例:153 400
输出样例:
153 is a narcissistic number
370
371
最佳答案
2020-8-10 20:32:58
附上以前做过的代码
  1. int narcissistic( int number )
  2. {
  3.         int i,t,p,c=0,n,sum=0;
  4.         p=number;
  5.         n = number;      
  6.         while(n)
  7.         {            
  8.                 c++;         
  9.                 n/=10;      
  10.         }
  11.         for(i=1;;i++)
  12.         {
  13.                 t=p%10;
  14.                 p=p/10;
  15.                 sum+=pow(t,c);
  16.                 if(t==0&&p==0)break;
  17.         }
  18.         if(number==sum)return 1;
  19.         else return 0;
  20. }
  21. void PrintN( int m, int n )
  22. {
  23.         int i;
  24.         m++;
  25.         for(i=m;i<n;i++)
  26.         if(narcissistic(i))printf("%d\n",i);
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-10 20:32:58 | 显示全部楼层    本楼为最佳答案   
附上以前做过的代码
  1. int narcissistic( int number )
  2. {
  3.         int i,t,p,c=0,n,sum=0;
  4.         p=number;
  5.         n = number;      
  6.         while(n)
  7.         {            
  8.                 c++;         
  9.                 n/=10;      
  10.         }
  11.         for(i=1;;i++)
  12.         {
  13.                 t=p%10;
  14.                 p=p/10;
  15.                 sum+=pow(t,c);
  16.                 if(t==0&&p==0)break;
  17.         }
  18.         if(number==sum)return 1;
  19.         else return 0;
  20. }
  21. void PrintN( int m, int n )
  22. {
  23.         int i;
  24.         m++;
  25.         for(i=m;i<n;i++)
  26.         if(narcissistic(i))printf("%d\n",i);
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 20:34:59 | 显示全部楼层
你第一个函数number最后是0跟sum是不可能相等的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 20:49:07 | 显示全部楼层
循环内写错了
for(count2 = 0; count2 < count1; count2 += 1) {
                        x *= x;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 20:49:38 | 显示全部楼层
占楼,修改下你的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 20:59:29 | 显示全部楼层
修改好了。




  1. int narcissistic( int number ) {
  2.         int num = number, t = number;// t用于最后比较 num用于计算长度 number用于求sum
  3.         int count1 = 0;//计算number长度
  4.         while(num>0) {
  5.                 count1+=1;
  6.                 num/=10;
  7.         }

  8.         int sum = 0;//计算累加和

  9.         do {
  10.                 int x, temp;// x用来计算n次方 temp保存原来的值 如153 中如 3 首先x=temp=3 x = 9 temp=3 x=27, temp=3
  11.                 x = temp = number%10;
  12.                 for(int count2 = 1; count2<count1; count2+=1) {
  13.                         x*=temp;
  14.                 }
  15.                 sum+=x;
  16.                 number/=10;
  17.         } while(number>0);
  18.         if(sum==t) {
  19.                 return 1;
  20.         } else {
  21.                 return 0;
  22.         }
  23. }

  24. void PrintN( int m, int n ) {
  25.         m+=1;
  26.         for(m; m<n; m+=1) {
  27.                 if(narcissistic(m)==1) {
  28.                         printf("%d\n",m);
  29.                 }
  30.         }
  31. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 16:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表