用C语言编写,自守数

2025-10-11 19:54:29

1、打开visual C++ 6.0-文件-新建-文件-C++ Source File

用C语言编写,自守数

用C语言编写,自守数

2、定义变量和数组:

#include<stdio.h>

void main()

{

    long i, j, k1, k2, k3, a[10] ={0}, num, m, n, sum;                /*定义变量及数组为长整形*/

用C语言编写,自守数

3、输入一个数表示范围:

    printf("请输入一个数表示范围:\n");

    scanf("%ld", &num);                                  /*从键盘中输入要求的范围*/

用C语言编写,自守数

4、对该范围内的数逐个试探:

    printf("结果是:");

    for (j = 0; j < num; j++)                                /*对该范围内的数逐个试探*/

    {

        m = j;

        n = 1;

        sum = 0;

        k1 = 10;

        k2 = 1;

用C语言编写,自守数

5、判断该数的位数:

        while (m != 0)                                   /*判断该数的位数*/

        {

            a[n] = j % k1;                                   /*分离出的数存入数组中*/

            n++;                                     /*记录位数,实际位数为n-1*/

            k1 *= 10;                                    /*最小n位数*/

            m = m / 10;

        }

        k1 = k1 / 10;

        k3 = k1;

用C语言编写,自守数

6、求每一部分积之和并输出自守数:

        for (i = 1; i <= n - 1; i++)

        {

            sum += (a[i] / k2 * a[n - i]) % k1 * k2;                  /*求每一部分积之和*/

            k2 *= 10;

            k1 /= 10;

        }

        sum = sum % k3;                                  /*求和的后n-1位*/

        if (sum == j)

            printf("%5ld", sum);                             /*输出找到的自守数*/

    }

    printf("\n");

用C语言编写,自守数

7、完整的源代码:

#include<stdio.h>

void main()

{

    long i, j, k1, k2, k3, a[10] ={0}, num, m, n, sum;                /*定义变量及数组为长整形*/

    printf("请输入一个数表示范围:\n");

    scanf("%ld", &num);                                  /*从键盘中输入要求的范围*/

    printf("结果是:");

    for (j = 0; j < num; j++)                                /*对该范围内的数逐个试探*/

    {

        m = j;

        n = 1;

        sum = 0;

        k1 = 10;

        k2 = 1;

        while (m != 0)                                   /*判断该数的位数*/

        {

            a[n] = j % k1;                                   /*分离出的数存入数组中*/

            n++;                                     /*记录位数,实际位数为n-1*/

            k1 *= 10;                                    /*最小n位数*/

            m = m / 10;

        }

        k1 = k1 / 10;

        k3 = k1;

        for (i = 1; i <= n - 1; i++)

        {

            sum += (a[i] / k2 * a[n - i]) % k1 * k2;                  /*求每一部分积之和*/

            k2 *= 10;

            k1 /= 10;

        }

        sum = sum % k3;                                  /*求和的后n-1位*/

        if (sum == j)

            printf("%5ld", sum);                             /*输出找到的自守数*/

    }

    printf("\n");

}

用C语言编写,自守数

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢