• 蓝桥杯 五次方数 暴力


    问题描述
      对一个数十进制表示时的每一位数字乘五次方再求和,会得到一个数的五次方数
      例如:1024的五次方数为1+0+32+1024=1057
      有这样一些神奇的数,它的五次方数就是它自己,而且这样的数竟然只有有限多个
      从小到大输出所有这样的数
    输出格式
      每个数独立一行输出
    按照题意,0和1也应该是五次方数。
    但是蓝桥杯测评的标准输出是这样

     理解为题意没有表达清楚,就按照不考虑0和1的情况来做。

    然后暴力遍历一下,这个也是有个细节操作,拆出这个数的每一位,然后直接求这一位的五次方。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main() {    
     4     for (int i = 2; i <= 100000000; i++) {
     5         int t = i;
     6         int sum = 0;
     7         while (t != 0) {
     8             int a = t % 10;
     9             sum += a * a * a * a * a;
    10             t /= 10;
    11         }
    12         if (sum == i) {
    13             cout << i << endl;
    14         }
    15     }
    16     return 0;
    17 }

    输出为

    这种题目其实可以先写程序运算好,然后直接输出。

    比如改为这样。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main() {
     4     cout << 4150 << endl;
     5     cout << 4151 << endl;
     6     cout << 54748 << endl;
     7     cout << 92727 << endl;
     8     cout << 93084 << endl;
     9     cout << 194979 << endl;
    10     return 0;
    11 }

    但是还有疑问,写的for循环2~100000000

    有没有可能在上面for循环的范围之外还存在五次方数。

    就是怎样证明我们已经找出了所有的五次方数。

    证明:

    一位数9的五次方数为9^5 = 59049

    二位数99的五次方数为9^5 * 2 = 118098

    三位数999的五次方数为9^5 * 3 = 177147

    为方便叙述,看这个图

     这就发现了,6位数每位全为9的五次方数为6位数,还有可能。

    7位数每位全为9的五次方数为6位数。所以绝对不可能存在7位数的五次方数。

    就是说位数每加1,最大的五次方数的范围加上9^5,跟不上位数的增长。

    所以写个for循环从2~1000000,已经足够找出所有的五次方数了。

    证明参考自https://blog.dotcpp.com/a/8677-14

  • 相关阅读:
    关于思考力
    2019第24周日
    提高收入的方法
    工作中的管理
    技术是解决问题的一种手段
    Django的事务性
    shell单引号与变量、双引号与变量、如何在多重引号里面取到shell变量的值?
    django外键以及主表和子表的相互查询
    django数据模型中 null=True 和 blank=True 有什么区别?
    Django静态文件的加载以及STATIC_URL、 STATIC_ROOT 、STATICFILES_DIRS的区别
  • 原文地址:https://www.cnblogs.com/fx1998/p/12739026.html
Copyright © 2020-2023  润新知