标题:这段代码看不懂,书上的解释没看懂。
取消只看楼主
时光隧道wmc
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2016-3-28
结帖率:100%
已结贴  问题点数:16 回复次数:1 
这段代码看不懂,书上的解释没看懂。
int main()
{
  long mul,number,k,ll,kk;
  printf("It exists following automorphic nmbers small than 200000: ");
  for(number=0;number<200000;number++)
  {
    for(mul=number,k=1;(mul/=10)>0;k*=10);这里
   
    kk=k*10;
    mul=0;
    ll=10;
    while(k>0)
    {
      mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;这里
     
      k/=10;
      ll*=10;
    }
    if(number==mul)
    printf("%ld ",number);
  }
}
搜索更多相关主题的帖子: following number 
2016-05-04 10:08
时光隧道wmc
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2016-3-28
得分:0 
回复 2楼 grmmylbs
求自守数,
若采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。
分析手工方式下整数平方(乘法)的计算过程,以376为例:
376 被乘数
× 376 乘数
----------
2256 第一个部分积=被乘数*乘数的倒数第一位  (376*6)
2632 第二个部分积=被乘数*乘数的倒数第二位  (376*7)
1128 第三个部分积=被乘数*乘数的倒数第三位  (376*3)

----------
141376 积

本问题所关心的是积的最后三位。分析产生积的后三位的过程,可以看出,在每一次的部分积中,并不是它的每一位都会对积的后三位产生影响。总结规律可以得到:在三位数乘法中,对积的后三位产生影响的部分积分别为:
第一个部分积中:被乘数最后三位*乘数的倒数第一位
第二个部分积中:被乘数最后二位*乘数的倒数第二位
第三个部分积中:被乘数最后一位*乘数的倒数第三位
将以上的部分积的后三位求和后截取后三位就是三位数乘积的后三位。这样的规律可以推广到同样问题的不同位数乘积。
按照手工计算的过程可以设计算法编写程序。
 

怎么求自守数,但一到程序上,分析每一步,就看不懂了。吧他拆成一步一步的,就看不懂。
2016-05-04 10:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-464373-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.304381 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved