A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gxppq 中级黑马   /  2014-12-21 19:43  /  412 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看到一个C语言编程的题目。题目不难,但“自守数”这个名词我头一次听说。现在把这道题放到这里跟大家分享一下(代码是题目提供的)。
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:
252=625 762=5776 93762=87909376
请求出200000以内的自守数
  1. #include<stdio.h>
  2. void main()
  3. {
  4.         long mul,number,k,ll,kk;
  5.         printf("It exists following automorphic nmbers small than 200000:\n");
  6.         for(number=0;number<200000;number++)
  7.         {
  8.                 for(mul=number,k=1;(mul/=10)>0;k*=10);
  9.                 /*由number的位数确定截取数字进行乘法时的系数k*/
  10.                 kk=k*10; /*kk为截取部分积时的系数*/
  11.                 mul=0; /*积的最后n位*/
  12.                 ll=10; /*ll为截取乘数相应位时的系数*/
  13.                 while(k>0)
  14.                 {
  15.                         mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;
  16.                         /*(部分积+截取被乘数的后N位*截取乘数的第M位),%kk再截取部分积*/
  17.                         k/=10; /*k为截取被乘数时的系数*/
  18.                         ll*=10;
  19.                 }
  20.                 if(number==mul) /*判断若为自守数则输出*/
  21.         printf("%ld ",number);
  22.         }
  23. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马