左嘉


私信TA

用户名:zuojia

访问量:88580

签 名:

Jz

等  级
排  名 5
经  验 34534
参赛次数 226
文章发表 72
年  龄 40
在职情况 在职
学  校 北京理工大学
专  业

  自我简介:

解题思路:
首先,找到这类数的上限,也就是每位取最大值9,若有7位数,9的5次方乘以7结果是413343,若有8位数,9的5次方乘以8结果是472392,还是6位数,若再增加位数:设此数为N,N的位数为x,x大于6的话,每增加1位,原数增加10的x次方,而其五次方数最多只增加59049(小于10的6次方),所以N的每位五次方求和的最大值一定小于N(当x>6)。找到上限后,只需要考察六位数以内的五次方数,用C语言描述就是:

#include<stdio.h>
#define N 999999
int main(){
    unsigned long long i,j,k,t;
    for(i=2;i<N;i++){
        t=i;
        k=0;
        while(t){
            j=t%10;//取出末位
            k+=j*j*j*j*j;//加上末位数字的五次方
            t/=10;//将更高位调整到末位
        }
        if(k==i) printf("%llu\n",i);
    }
    return 0;
}

注意事项:
测试得到数据后直接输出计算结果。

参考代码:

#include<stdio.h>
int main(){
    printf("4150\n4151\n54748\n92727\n93084\n194979\n");
    return 0;
}


 

0.0分

1 人评分

  评论区

  • «
  • »