这个水仙花数的c语言程序我为什么运行不出来呀

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

#include <stdio.h>
int wei(int a)
{
    int n=0;
    while (a)
    {
        a=a/10;
        n=n+1;
    }
    return n;
}
int function (int a,int b)
{
    int t,n,i,sum=0,w,num=0,p,c;
    if (a>b)
    {
        t=b;
        b=a;
        a=t;
    }
    if (a<100)
    a=100;
    if (b<100)
    return 0;
    for (i=a;i<=b;i++)
    {
        c=i;
        n=wei(i);
        sum=0; 
        while (i)
        {
          w=i%10;
          i=i/10;
          sum=sum+w*w*w;    
        }
        if (sum==c)
        num=num+1;
        
    }
    return num;
    
    
}
int main ()
{
    int a,b,n;
    scanf ("%d %d",&a,&b);
    n=function (a,b);
    printf ("%d",n);
}

问题描述
水仙花数是指一个 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 main()

{
    int i,a,b,c;
    for(i=100;i<1000;i++){
        a=i/100;
        b=(i%100)/10;
        c=i%10;
        
        if(i==a*a*a+b*b*b+c*c*c){
            printf("%d\n",i);
        }
    }
    return 0;
}