隔壁王健喜儿 2022-11-01 14:30 采纳率: 96%
浏览 37
已结题

水仙花数C语言求改错


/*
题目:    
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。

输入说明    
输入由两个整数a和b构成,a和b之间用空格分隔。0<a,b<10000

输出说明    
输出区间[a,b]或区间[b,a]上水仙花数的个数。

输入样例    
3  1000  

输出样例    
4

提示    
a,b的位数n可能小于3
*/

#include <stdio.h>
#include <math.h>
int function(int a, int b);
int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d", function(a, b));
    
    return 0;
}

int function(int a, int b)
{
    int i, sum, count, j, m, p, q;
    for (i=a, count=0; i<=b; i++)
    {
        for(p=1, q=0; p<i; p*=10)
        {
            if (i/p>0)
                q++;
        }
        int s = i;
        for (j=0, sum=0; j<q; j++)
        {
            m=i%10;
            sum+=pow(m, q);
            i/=10;          
        }
        if (sum==s)
            count++;
    }
    return count;
}

运行不出结果,求改错

尝试了另一种写法,还是运行不出来,代码↓

#include <stdio.h>
#include <math.h>
int function(int n);
int main()
{
    int a, b, i, count;
    scanf("%d %d", &a, &b);
    for (i=a<b?a:b, count=0; i<=a<b?b:a; i++)
    {
        if (function(i)==1)
            count++;
    }
    printf("%d", count);
    return 0;
}

int function(int n)
{
    int sum, p, q, j, m, k;
    for(p=1, q=0; p<n; p*=10)
    {
        if (n/p>0)
            q++;
    }
    int s=n;
    for (sum=0, j=0; j<q; j++)
    {
        m=n%10;
        sum+=pow(m, q);
        n/=10;
    }
    if (sum == s)
        k=1;
    else
        k=0;
    return k;
}
  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-11-01 16:06
    关注

    题主的代码修改如下,改动处见注释,供参考:

    #include <stdio.h>
    #include <math.h>
    int function(int n);
    int main()
    {
        int a, b, i, count;
        scanf("%d %d", &a, &b);
        if (a > b)               //修改 
            i = a, a = b, b = i;
        for (i = a, count = 0; i <= b; i++)
        {
            if (function(i)) { //(function(i) == 1) //修改 
                //printf("%d\n", i);
                count++;
            }
        }
        printf("%d", count);
        return 0;
    }
    int function(int n)
    {
        int sum, p, q, j, m, k;
        for (p = 1, q = 0; p < n; p *= 10)
        {
            //if (n / p > 0) 修改
            q++;
        }
        if (q < 3) return 0; //修改 
        int s = n;
        for (sum = 0, j = 0; j < q; j++)
        {
            m = n % 10;
            sum += pow(m, q);
            n /= 10;
        }
        return sum == s;
        //    k = 1;       //修改
        //else           //修改
        //    k = 0;       //修改
        //return k;      //修改
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 修改了问题 11月1日
  • 修改了问题 11月1日
  • 展开全部

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试