4.26

来源:互联网 发布:淘宝怎么增加店铺类目 编辑:程序博客网 时间:2024/06/07 19:35


#include <stdio.h>

main()
{
  long m,n,k,k1,a;
  for (n = 0; n < 200000; n++)
  {
    for (m = n,k=1;(m/=10)>0; k*=10); //首先由n的值来确定最终截取尾数的长度,用k表示

    k1 = k*10;                                      //k1为截取部分积时的系数
    m = 0;                                            //积的最后N位
    a = 10;                                           // a为截取乘数相应位时的系数
    while (k > 0)
    {
           m = (m + (n%(k*10)) * (n%a - n%(a/10))) % k1;  //(部分积+截取的后N位*截取乘数的第M位) 再截取部分积
           k/=10;                                      // k为截取被乘数时的系数
           a*=10;
    }
    if (n == m)
    {
         printf ("%ld\n",n);
    }
  }
}

此题是求200000内的自守数。

难点在于计算机无法表示过大的数。这时候就必须寻找其中的规律

while语句是整个程序的重点

要善于整合和寻找数之间的关系


0 0
原创粉丝点击