学习小结

本文介绍了一个C语言程序,用于找出200000以内的自守数,并分享了编程过程中遇到的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例程:

#include <stdio.h>



int main()
{
    long int i;
    int j;
    int k;
    long int m;
    int n;
    int cont = 1;
    long int l = 1;
    int a [ 6 ];
    int b [ 6 ];
    long int c [ 6 ];
    for(i = 200000; i >=0 ; i--)
    {
        m = i;
        for( cont = 0; m != 0; cont++)
            m = m/10;
        m = i;

        for( j = 0,k = 100000; j<6 ; j++)   

        {

            a [ j ] = m/k;
            b [ j ] = a [ j ];
            m = m%k;
            k = k/10;
        }
        c [ 0 ] = (a [ 0 ]*100000+a [ 1 ]*10000+a [ 2 ]*1000+a [ 3 ]*100+a [ 4 ]*10+a [ 5 ])*b [ 5 ];
        c [ 1 ] = (a [ 1 ]*10000+a [ 2 ]*1000+a [ 3 ]*100+a [ 4 ]*10+a [ 5 ]*1)*(b [ 4 ]*10);
        c [ 2 ] = (a [ 2 ]*1000+a [ 3 ]*100+a [ 4 ]*10+a [ 5 ]*1)*b [ 3 ]*100;
        c [ 3 ] = (a [ 3 ]*100+a [ 4 ]*10+a [ 5 ]*1)*b [ 2 ]*1000;
        c [ 4 ] = (a [ 4 ]*10+a [ 5 ]*1)* b [ 1 ]*10000;
        c [ 5 ] = a [ 5 ]*b [ 0 ]*100000;
        for( j = 0,l = 1; j<cont; j++)
            l *= 10;
        n = (c [ 0 ]+c [ 1 ]+c [ 2 ]+c [ 3 ]+c [ 4 ]+c [ 5 ])%l;
        if(n == i)
            printf("%d  ",i);

        }

}

此题求200000以内的自守数(一个数的平方的尾数等于该数自身的自然数)

第一次尝试时使用了求一个数的平方再求取尾数,无法求出。查看多次无效后,书上说数值过大,计算机无法显示。

将其删除,以之前高次方求尾数的方法计算,发现最后一位正确,然而其他位数仍不满足要求。

再计算多组数据后,发现最后一位是俩数最后一位乘积的个位,之前则是各位位数乘以一样位数加上之前进位。

再次编译后,结果出现乱码,反复检查后查出

   m = i;
        for( cont = 0; m != 0; cont++)
            m = m/10;
        m = i;

        for( j = 0,k = 100000; j<6 ; j++)   

        {

            a [ j ] = m/k;
            b [ j ] = a [ j ];
            m = m%k;
            k = k/10;
        }

此段中第一次调用了m后并没有将其恢复为初值i,在编译后发现只有三位自守数才有效。发现只设了三位,再修改,加入一个cont计算位数,终于成功。

在写代码时一定要注意数据长度和位数是我今天最大的收获。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值