鱼C论坛

 找回密码
 立即注册
查看: 3249|回复: 10

[已解决]为什么输入数后,不会打印出是不是变异水仙花数,该怎么解决呢?

[复制链接]
发表于 2022-10-23 17:25:50 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>

void sxh(int m)
        {       
                int n;
                n = m;
               
            int a = (n / 1000000000) * (n % 1000000000);
               
                int b = (n / 100000000) * (n % 100000000);
               
                int c = (n / 10000000) * (n % 10000000);

                int d = (n / 1000000) * (n % 1000000);
               
                int e = (n / 10000) * (n % 10000);
               
                int f = (n / 1000) * (n % 1000);
               
                int g = (n / 100) * (n % 100);
               
                int h = (n / 10) * (n % 10);
               
                int sum = a + b + c + d + e + f + g + h;
                if (n == sum)
                        {
                        return printf("他是变异水仙花数");
                        }
                else
                        {
                        return printf("他不是变异水仙花数");
                        }
               
        }
       
int main()
{
int i;
printf("输入一个数,我会判断他是否为变异水仙花数:");
scanf("%d",&i);
int sxh(i);

return 0;
}
最佳答案
2022-10-23 18:02:14
本帖最后由 jackz007 于 2022-10-23 18:31 编辑
  1. #include<stdio.h>

  2. int sxh(long long m)
  3. {        
  4.         long long k , s                                                      ;
  5.         int r = 0                                                            ;
  6.         if(m > 99 && m % 10) {
  7.                 for(s = 0 , k = 10 ; m / k ; k *= 10) s += (m / k) * (m % k) ;
  8.                 if(s == m) r = 1
  9.         }
  10.         return r                                                             ;
  11. }

  12. int main()
  13. {
  14.         long long i , n                                                      ;
  15.         n = 10000                                                            ;
  16.         for(i = 0 ; i < n ; i ++) if(sxh(i)) printf("%I64d\n" , i)           ;
  17. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 655
  4. 1461
  5. 1642
  6. 2361
  7. 3442

  8. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-23 17:29:13 | 显示全部楼层
          什么是变异水仙花数?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-23 17:42:01 | 显示全部楼层
jackz007 发表于 2022-10-23 17:29
什么是变异水仙花数?

什么是变种水仙花数?

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461), (14和61), (146和1), 如果所有拆分后的乘积之和等于自身,则是一个Lily Number。l例如:655 = 6 * 55 + 65 * 5
           1461 = 1 * 461 + 14 * 61 + 146 * 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-23 17:54:51 | 显示全部楼层
把sxh函数中的return去掉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-23 17:57:20 | 显示全部楼层
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <math.h>

  4. unsigned place(unsigned num) {
  5.         unsigned res = 0;
  6.         do {
  7.                 num /= 10;
  8.                 res++;
  9.         } while (num);
  10.         return res;
  11. }

  12. unsigned isNarcissistic(unsigned num) {
  13.         unsigned sum = 0, p = place(num), n = num;
  14.         while (n) {
  15.                 sum += pow(n % 10, p);
  16.                 n /= 10;
  17.         }
  18.         return sum == num;
  19. }

  20. int main(void) {
  21.         for (int num = 0; num < 1e7; ++num) {
  22.                 isNarcissistic(num) ? printf("%d\n", num) : 0;
  23.         }
  24.         return 0;
  25. }
复制代码
  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 153
  12. 370
  13. 371
  14. 407
  15. 1634
  16. 8208
  17. 9474
  18. 54748
  19. 92727
  20. 93084
  21. 548834
  22. 1741725
  23. 4210818
  24. 9800817
  25. 9926315
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-23 18:02:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-23 18:31 编辑
  1. #include<stdio.h>

  2. int sxh(long long m)
  3. {        
  4.         long long k , s                                                      ;
  5.         int r = 0                                                            ;
  6.         if(m > 99 && m % 10) {
  7.                 for(s = 0 , k = 10 ; m / k ; k *= 10) s += (m / k) * (m % k) ;
  8.                 if(s == m) r = 1
  9.         }
  10.         return r                                                             ;
  11. }

  12. int main()
  13. {
  14.         long long i , n                                                      ;
  15.         n = 10000                                                            ;
  16.         for(i = 0 ; i < n ; i ++) if(sxh(i)) printf("%I64d\n" , i)           ;
  17. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 655
  4. 1461
  5. 1642
  6. 2361
  7. 3442

  8. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-23 18:22:56 | 显示全部楼层
tommyyu 发表于 2022-10-23 17:54
把sxh函数中的return去掉

去了也不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-23 18:37:38 | 显示全部楼层
jackz007 发表于 2022-10-23 18:02
编译、运行实况:

最后要求是这个,求实现代码和简单的批注
(1)实现一个子函数用来判断输入的数是否是变异水仙花数
(2)在主函数里输入数字n,在主函数里调用子函数判断输入的数是否是变异水仙花数 ,之后输出1~n(包括1和n)内的所有变异水仙花数(n最大为10亿)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-23 18:40:18 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-23 18:44 编辑
梦有所依丶 发表于 2022-10-23 18:37
最后要求是这个,求实现代码和简单的批注
(1)实现一个子函数用来判断输入的数是否是变异水仙花数
( ...

  1. #include<stdio.h>

  2. int sxh(long long m)
  3. {        
  4.         long long k , s                                                      ;
  5.         int r = 0                                                            ;
  6.         if(m > 99 && m % 10) {
  7.                 for(s = 0 , k = 10 ; m / k ; k *= 10) s += (m / k) * (m % k) ;
  8.                 if(s == m) r = 1                                             ;
  9.         }
  10.         return r                                                             ;
  11. }

  12. int main()
  13. {
  14.         long long i , n                                                      ;
  15.         scanf("%I64d" , & n)                                                 ;
  16.         for(i = 1 ; i < n + 1 ; i ++) if(sxh(i)) printf("%I64d\n" , i)       ;
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-23 18:40:28 | 显示全部楼层
jackz007 发表于 2022-10-23 18:02
编译、运行实况:

我这有已经编好的代码,就是不知道怎么改成有子函数的形式,代码如下:
#include<stdio.h>
int main() {
        int n;
        int i;
        printf("输入一个最大数,我会计算从1到他的变异水仙花数并判断他是否为变异水仙花数:");
        scanf("%d",&n);
        for (i = 1; i <= n; i++)
        {   
                int a = (i / 1000000000) * (i % 1000000000);
               
                int b = (i / 100000000) * (i % 100000000);
               
                int c = (i / 10000000) * (i % 10000000);

                int d = (i / 1000000) * (i % 1000000);
               
                int e = (i / 10000) * (i % 10000);
               
                int f = (i / 1000) * (i % 1000);
               
                int g = (i / 100) * (i % 100);
               
                int h = (i / 10) * (i % 10);
               
                int sum = a + b + c + d + e + f + g + h;
               
               
                if (i == sum)
                {
                        printf("%d ", i);

                }
               
        }
       
            int a = (n / 1000000000) * (n % 1000000000);
               
                int b = (n / 100000000) * (n % 100000000);
               
                int c = (n / 10000000) * (n % 10000000);

                int d = (n / 1000000) * (n % 1000000);
               
                int e = (n / 10000) * (n % 10000);
               
                int f = (n / 1000) * (n % 1000);
               
                int g = (n / 100) * (n % 100);
               
                int h = (n / 10) * (n % 10);
               
                int sum = a + b + c + d + e + f + g + h;
                if (n == sum)
                {
                        printf("他是变异水仙花数");
                }
                else
                {
                        printf("他不是变异水仙花数");
                }
               
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-23 18:42:23 | 显示全部楼层
梦有所依丶 发表于 2022-10-23 18:40
我这有已经编好的代码,就是不知道怎么改成有子函数的形式,代码如下:
#include
int main() {

          这就是你需要学习的地方,其实,通过循环,根本就没有那么复杂。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 06:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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