自守数10000以内(C)

#include
int J(long num )        //统计数字位数
{   int i=0;
    while (num>0)
    {
        num=num/10;
        i++;
    }
    return i;
}


long shi(int n)        //10的次方
{   long cheng=1.0;
    while (n>0)
        {
            cheng*=10;
            n--;
        }
    return cheng;

}

/*利用自守数之积减去自守数后空下来的位置全是零来做。先计算自守数的位数,积减去自守数,用十的位数次方被积取余数为零则满足条件否则不是。*/


void main()
{
long mul,muloo,number=2;
int n;
while(number<10000)
    {   n=J(number);
        mul=number*number;
        muloo=mul-number;//相减
        if( muloo%(shi(n))==0)//看是不是自守数
        {
            printf("%ld\n",number);
        }
        number++;
    }
}

你可能感兴趣的:(算法)