快乐打码 2023-02-14 19:35 采纳率: 70.6%
浏览 33

关于水仙花数我写了两种方法,但是都是部分正确,请问哪 错了,要怎么改

本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:
输入在一行中给出两个正整数M和N(100≤M≤N≤999)。

输出格式:
顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。

如果M或者N不符合题目的要求,则输出Invalid Value.。

输入样例1:
100 400
输出样例1:
153
370
371
输入样例2:
500 600
输出样例2:

输入样例3:
990 101
输出样例3:
Invalid Value.

#include<stdio.h>
int m,n,i;
int flower(int i){
    int a,b,c,sum=0;
    a=i%10;
    b=i/10%10;
    c=i/100;
    sum=b*b*b+a*a*a+c*c*c;
    if(sum==i)
        return 1;
    else
        return 0;
}
int main(){
    scanf("%d %d",&m,&n);
    if(m>n)
    {
     printf("Invalid Value.");   
    }else{
        for(i=m;i<n;i++){
           flower(i);
            if(flower(i)==1)
                printf("%d\n");
        }
          }
           }
#include<stdio.h>
int m,n,i;
int flower(int i){
    int x=i;
    int a,sum=0;
    while(i!=0){
    a=i%10;
    sum=sum+a*a*a;
    i=i/10;
   }
    if(sum==x)
        return 1;
    else
        return 0;
}
int main(){
    scanf("%d %d",&m,&n);
    if(m>n)
    {
     printf("Invalid Value.");   
    }else{
        for(i=m;i<n;i++){
           flower(i);
            if(flower(i)==1)
                printf("%d\n");
        }
          }
           }

  • 写回答

3条回答 默认 最新

  • 量化研究所 2023-02-14 20:05
    关注

    在两种代码中都存在一个问题:在找到三位水仙花数后,没有输出该数。具体地,需要修改如下:

    第一个代码中,在 printf("%d\n"); 的括号中添加需要输出的数 i,即 printf("%d\n", i);

    第二个代码中,在 printf("%d\n"); 的括号中添加需要输出的数 x,即 printf("%d\n", x);

    修改完后,这两份代码就能够输出正确结果了。
    第一份代码的修改后代码如下:

    #include <stdio.h>
    
    int m, n;
    
    int flower(int i) {
        int a, b, c, sum = 0;
        a = i % 10;
        b = i / 10 % 10;
        c = i / 100;
        sum = b * b * b + a * a * a + c * c * c;
        if (sum == i)
            return 1;
        else
            return 0;
    }
    
    int main() {
        scanf("%d %d", &m, &n);
        if (m > n) {
            printf("Invalid Value.");
        } else {
            for (int i = m; i <= n; i++) {
                if (flower(i) == 1)
                    printf("%d\n", i);
            }
        }
        return 0;
    }
    
    
    

    第二份代码的修改后代码如下:

    #include <stdio.h>
    
    int m, n;
    
    int flower(int i) {
        int x = i;
        int a, sum = 0;
        while (i != 0) {
            a = i % 10;
            sum = sum + a * a * a;
            i = i / 10;
        }
        if (sum == x)
            return 1;
        else
            return 0;
    }
    
    int main() {
        scanf("%d %d", &m, &n);
        if (m > n) {
            printf("Invalid Value.");
        } else {
            for (int i = m; i <= n; i++) {
                if (flower(i) == 1)
                    printf("%d\n", i);
            }
        }
        return 0;
    }
    
    
    

    注意到两份代码的不同点在于计算个位、十位、百位的代码部分,另外一些细节上的不同点,比如变量的命名等,不影响最终的结果

    评论

报告相同问题?

问题事件

  • 创建了问题 2月14日

悬赏问题

  • ¥15 暴雪战网api相关问题
  • ¥15 而使用UE5引擎的 工具选项里 打开c++ visual studio 就会有部分显示加载失败 如图 加载失败的这张图 请问是什么原因
  • ¥15 mysql 对多个字段模糊查询,返回第一个匹配的字段
  • ¥15 the testing results of the whole dataset is empty
  • ¥15 can问题,往哥解决
  • ¥15 FFmpeg 成功推流到 Nginx RTMP 服务器但无法用 ffplay 或 VLC 播放
  • ¥15 请修改以下C语言代码使其能正确输出最短路径
  • ¥20 抖音商城拉码器安卓报错求解决办法或者有新的拉码脚本也可以介绍一下
  • ¥15 MPLAB IDE V2.35 报错make[2]: *** [build/default/production/_ext/1472/MSSP_I2C.p1] Error 1
  • ¥15 在国外文献网站里点击view pdf 加载异常缓慢甚至加载不出来。