• 100c之27:自守数


    问题

    自守数是指一个数的平方的尾数等于该数自身的自然数。例如: 25×25=625; 76×76=5776 ; 9376×9376 = 87909376,求20000000以内的自守数*

    分析

    不能使用穷举,因为会超过计算机表示的范围,而且此题也有一定的技巧性,比如最有可能成为自守数的是以1, 5, 6结尾的自然数。以其他数结尾的自然数不可能成为自守数。 所以只需要计算出该数平方的后几位数即可,不需要全部都计算。 比如以76的平方为例, 决定其乘积后两位的是76和6乘积的后两位以及76和7乘积的后一位。比如76×6=456, 76×7=672, 456和672错位相加 5和2相加得得到76平方的十位数7, 个位数由 6×6的个位数决定。

    解决方案

     1:  /**
     2:   * @file   027c.c
     3:   * @author Chaolong Zhang <emacsun@163.com>
     4:   * @date   Tue May 28 19:55:46 2013
     5:   * 
     6:   * @brief  
     7:   * 
     8:   * 
     9:   */
    10:  
    11:  #include <stdio.h>
    12:  #include <math.h>
    13:  
    14:  int get_digits ( int number ); //get the number of digits
    15:  
    16:  int main(int argc, char *argv[])
    17:  {
    18:      int number,digits;
    19:      for (number=0; number < 20000000; ++number)
    20:      {
    21:          int temp=0;
    22:          if (number%10/5 == 1 || number%10/6 ==1 )
    23:          {
    24:              digits = get_digits( number );
    25:              for (int i = 1; i <=digits; ++i)
    26:                  temp += number * ( number/ ( int )pow( 10, i-1 )%10 )  % ( int )pow( 10 ,digits -i +1 ) * ( int ) pow( 10, i-1 );
    27:              if (temp% ( int )  pow( 10, digits )== number)
    28:                  printf ("%d \n",number);
    29:          }  
    30:      }
    31:      return 0;
    32:  }
    33:  
    34:  
    35:  int get_digits ( int number )
    36:  {
    37:      int i=1;
    38:  
    39:      while( ( number = number/ 10 ) > 0 ) i++;
    40:      return i;
    41:  }
    

    最后运行结果

    5 
    6 
    25 
    76 
    376 
    625 
    9376 
    90625 
    109376 
    890625 
    2890625 
    7109376 
    12890625
    

    0 和 1没有算出来,这是因为在程序中设置了过滤只考察了尾数为5和6的自然数,实际上很容易证明尾数为0和1的数也只有0和1为自守数。

  • 相关阅读:
    关于下下载typora的相关说明
    Vue项目vscode 安装eslint插件的方法(代码自动修复)
    [0].Net开发者社区--您好大的官威啊!
    关于hadoop安装后无法访问web界面查看查看 NameNode 和 Datanode 信息
    C#(winform)记录阻止关闭页面方法
    Android开发:记录Cannot resolve symbol'R'问题解决记录
    C#Winform开发杂项记录
    C#Winform 使用NPOI导入、导出Excel
    C#记录一些用到的比对方法
    C#(Winform开发)Excel导出
  • 原文地址:https://www.cnblogs.com/chaolong/p/3104801.html
Copyright © 2020-2023  润新知