YXSDX 2022-08-03 12:40 采纳率: 60%
浏览 52
已结题

关于#代码,水仙花数#的问题,如何解决?

水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 13 + 53+ 33。本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3<=N<=7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:
3
输出样例:
153
370
371
407
版权声明:本文为CSDN博主「coderstory」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fjinhao/article/details/46853171

我用C语言编写了一个程序,以下是我的代码:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int j=n;
int i;
int k=0;
int a=1;
do{
a*=10;
n--;
}while(n>1);
int b=a*10-1;
int c=a;
// printf("%d",c);
int d=0;
int m;
for(a=c;a<=b;a++){
// a=371为什么不行 ?
int l=a;
do{
d=l%10;
int o=d;
for(i=1;i<j;i++){
d*=o;
}
k+=d;
l/=10;
i=1;
}while(l>0);
if(k==a){
printf("%d\n",a);
}else{
k=0;
}
}
return 0;
}

我输入3的时候的结果只有3个,没有371,各位帮我看看

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-08-03 13:28
    关注

    供参考:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int N, i, p, t, sum, n, m, k;
        do {
            scanf("%d", &N);
        } while (N < 3 || N > 7); // 3<=N<=7
        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;
    }
    
    

    题主的代码修改如下,供参考:

    #include <stdio.h>
    int main()
    {
        int n;
        scanf("%d", &n);
        int j = n;
        int i;
        int k = 0;
        int a = 1;
        do {
            a *= 10;
            n--;
        } while (n > 1);
        int b = a * 10 - 1;
        int c = a;
        //printf("%d", c);
        int d = 0;
        int m;
        for (a = c; a <= b; a++) {
            // a=371为什么不行 ?
            int l = a;
            do {
                d = l % 10;
                int o = d;
                for (i = 1; i < j; i++)
                    d *= o;
                k += d;
                l /= 10;
                //i = 1; 修改
            } while (l > 0);
            if (k == a) {
                printf("%d\n", a);
            }
            //else { 修改
            k = 0;
            //} 修改
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日
  • 创建了问题 8月3日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度