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