自守数

自守数是指一个数的平方的尾数等于该数自身的自然数,如25*25=625,76*76=5776.要求求出一定范围内的所有自守数。

题目分析:

刚拿到这个题目的时候认为解题关键在于,测试该数平方数的尾数和该数自身的自然数相等问题。导出新问题如何求出该平方数的尾数,要取和自然数位数相同的位数该怎么取。

看了一下标准答案如下,表示细节方面看不懂,贴出如下:

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4. long i, j, k1, k2, k3, a[10] = {0}, num, m, n, sum;            /*定义变量及数组为长整形*/
  5. printf("请输入一个数表示范围:\n");
  6. scanf("%ld", &num);                        /*从键盘中输入要求的范围*/
  7. printf("结果是:");
  8. for (j = 0; j < num; j++)                 /*对该范围内的数逐个试探*/
  9. {
  10. m = j;
  11. n = 1;
  12. sum = 0;
  13. k1 = 10;
  14. k2 = 1;
  15. while (m != 0)                        /*判断该数的位数*/
  16. {
  17. a[n] = j % k1;                     /*分离出的数存入数组中*/
  18. n++;                                 /*记录位数,实际位数为n-1*/
  19. k1 *= 10;                            /*最小n位数*/
  20. m = m / 10;
  21. }
  22. k1 = k1 / 10;
  23. k3 = k1;
  24. for (i = 1; i <= n - 1; i++)
  25. {
  26. sum += (a[i] / k2 * a[n - i]) % k1 * k2;                 /*求每一部分积之和*/
  27. k2 *= 10;
  28. k1 /= 10;
  29. }
  30. sum = sum % k3;                     /*求和的后n-1位*/
  31. if (sum == j)
  32. printf("%5ld", sum);                /*输出找到的自守数*/
  33. }
  34. printf("\n");
  35. return 0;
  36. }

效果图如下:

不过看到数组后产生灵感,想了个办法用while循环结合一个变量来统计自然数的位数,然后求出10的位数平方,用平方数对其求余再和自然数比较,并采用了模块化设计。

代码如下:

  1. #include<stdio.h>
  2. int ss(long);
  3. int main(void)
  4. {
  5. int i;
  6. long sum;
  7. scanf("%ld",&sum);
  8. for(i=0;i<=sum;i++)
  9. {
  10. if(ss(i))                                         //判断是否符合要求
  11. printf("%d ",i);
  12. }
  13. printf("\n");
  14. return 0;
  15. }
  16. int ss(long value)
  17. {
  18. int i,n=0,k=1;
  19. long temp=value,result;               //用long型防止溢出,用一个temp来复制变量,保留一个原样。
  20. long ch=value*value;                  //求平方数
  21. while(temp!=0)
  22. {
  23. n++;                                        //统计自然数的位数
  24. temp/=10;
  25. }
  26. for(i=0;i<n;i++)
  27. k=k*10;                                  //求出取余的数
  28. result=ch%k;                          //求余
  29. if(value==result)                      //测试
  30. return 1;
  31. return 0;
  32. }

效果图如下:

个人觉得对比给出的标准答案改进有
一、代码行数减少了
二、进行了模块化设计
三、未使用数组
四、更易理解

C语言之自守数的更多相关文章

  1. 自守数算法----C语言实现

    #include <stdio.h> //自守数算法 //ep : 25 ^ 2 = 625 76 ^ 2 = 5776 9376 ^ 2 = 87909376 /*ep : * 376 ...

  2. 1091 N-自守数 (15 分)C语言

    如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为"N-自守数".例如 3×92^​2​​ =25392,而 25392 的末尾两位正好是 92,所以 ...

  3. HW--自守数

    package testcase; import huawei.Demo; import junit.framework.TestCase;//加入测试框架,不需要写Main函数 public cla ...

  4. 1091 N-自守数

    如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3×92​2​​=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守 ...

  5. PAT 乙级 1091 N-自守数 (15 分)

    1091 N-自守数 (15 分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3×92​2​​=25392,而 25392 的末尾两位正好是 ...

  6. pat乙级 1091 N-自守数 (15 分)

    如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3×92​2​​=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守 ...

  7. 1091 N-自守数 (15 分)

    如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3×92​2​​=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守 ...

  8. C语言变长參数的认识以及宏实现

    1.认识 变长參数是C语言的特殊參数形式.比如例如以下函数声明: int printf(const char *format, ....); 如此的声明表明,printf函数除了第一个參数类型为con ...

  9. B1091 N-自守数 (15分)

    B1091 N-自守数 (15分) 如果某个数 \(K\)的平方乘以\(N\) 以后,结果的末尾几位数等于 \(K\),那么就称这个数为"\(N\)-自守数".例如 \(3×92 ...

随机推荐

  1. 第八届河南省赛D.引水工程(kruthcra+prime)

    D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 118  Solved: 41 [Submit][Status][Web Board] D ...

  2. 收藏:左路Deep Learning+右路Knowledge Graph,谷歌引爆大数据

    发表于2013-01-18 11:35| 8827次阅读| 来源sina微博 条评论| 作者邓侃 数据分析智能算法机器学习大数据Google 摘要:文章来自邓侃的博客.数据革命迫在眉睫. 各大公司重兵 ...

  3. redis 缓存技术与memcache的最大差别

    1 什么是redis  redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对很多其它,包含string(字符串).list(链表).set(集合)和zs ...

  4. CVT电子集团--笔试部分试题

    之前有在网上答了下CVT的网上笔试题,特别把它们都弄下来,答案参考,不一定是对的,有错希望大家能提出来. 1.有关系R和S,R∩S等价于(B) A.S-(R-S)    B.R-(R-S)   C.( ...

  5. 图片变灰css3

    -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filte ...

  6. Hadoop学习笔记(1)概述

    写在学习笔记之前的话: 寒假已经开始好几天了,似乎按现在的时间算,明天就要过年了.在家的这几天,该忙的也都差不多了,其实也都是瞎忙.接下来的几点,哪里也不去了,静静的呆在家里学点东西.所以学习一下Ha ...

  7. .net 基础错误-string.replace 方法

    1.string string.Replace(string oldValue,string newValue) 返回一个新的字符串,其中当前示例中出现的所有指定字符串都替换另一个指定字符串 错误:总 ...

  8. CRM中的一个函数,保存一下,别系统被ぅ崩坏就麻烦了.

    CREATE OR REPLACE function UXQLCRM.GET_WEI_XIU(htfid in varchar2) ); CURSOR cr_bg_jl is select " ...

  9. 网页往数据库里插数据要用utf8,否则就乱码

    把网页的这行<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ...

  10. FPGA工程中用C语言对文件进行处理_生成mif文件

    本博客中有用verilog处理文件数据的代码,本博文采用C 处理文件中的数据. 有时候要生成一个mif文件—— altera memory  initial file.本次工程中我得到的是一个大型的数 ...