水仙花数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;
}

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

#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;      //修改
}


//导入头文件
#include<stdio.h>
#include<stdlib.h>
//主函数
int main(){
    int i,j,k,n,sumi,sumj,sumk;//定义7个整型数据
 
    printf("\n100-1000 包含的“水仙花”数分别有: \n\n"); 
 
    for(n=100;n<1000;n++){     
 
        //循环求数字个位、十位、百位上的数字
        i=n/100;//求百位       
        j=n/10%10; //求十位       
        k=n%10; //求个位
 
        //求i、j、k的立方和
        sumi=i*i*i;//求个位立方和  
        sumj=j*j*j;//求十位立方和  
        sumk=k*k*k;//求百位立方和
 
         //判断是否为 水仙花数
        if(n==sumi+sumj+sumk){                  
            printf("%-5d",n);//输出 水仙花数 
        } 
    }
 
    printf("\n");//换行     
    return 0;
}