本来我的题目是从1开始的数据,这样比现在这个答案要多出一个1数据作为答案(1的5次方=1)
但是发现这样错了
范围的推理过程如下:
上边界:
以单位数最大值9为边界,9^5=59049 是五位数字,
那么5位数字增加一位为添加任何数据的极限,即 5*(9^5)=295245(即每一位都是9,当然数据是达不到的)而这样一个极限的数据是6位数,我为了编写方便,可以直接写一个最大的六位数999999(当然你也可以按照推理数据写295249),超过6位数已经不会产生数据了,这就是上边界。
下边界:
本来我是从个位数开始计算的,这样计算可以有两个数据,0和1,0的五次方为0,1的五次方为1,但可惜本题的正确答案并不包含这两个数据,那么既然错了之后,可以发现数据其实从2位数开始也未尝不可,找到几个详细的数据之后又可以发现,大概在4位数的时候,出现了一个数据的平衡点,所以可以拿4作为边界,这需要有一定的数据敏感性,建议还是老实使用10作为下边界吧。
代码:
#include<stdio.h> #include<math.h> int main() { for(int i=1000; i<=999999; i++) { int t1=i%10,t2=i/10%10,t3=i/100%10,t4=i/1000%10,t5=i/10000%10,t6=i/100000;//分别是个,十,白,千,万,十万位 if(pow(t1,5)+pow(t2,5)+pow(t3,5)+pow(t4,5)+pow(t5,5)+pow(t6,5)==i) printf("%d\n",i); }//判断一下五次方数从4位开始,6位结束,或多或少(1除外)均不可能产生五次方数字 return 0; }
最终答案如此
4150
4151
54748
92727
93084
194979
可以直接用C++的大R输出法快速解决:(直接输出)
cout<<R"(4150 4151 54748 92727 93084 194979)"<<endl;
就可以了。
0.0分
10 人评分
我想问一下为什么我这数组的赋值有问题 #include<stdio.h> #define max(x) x*x*x*x*x int main() { int i,j; int shu[10]; for(i = 0 ; i < 1000000 ; i++){ for(j = 0 ; j < 10 ; j++){//让存数的数组每位都为0 shu[j]=0; } int b=i;//保存一下i的数值 j=0; while(b != 0){ if(b < 10){//当数小于10时,直接存储之后break结束 shu[j]=b; break; } shu[j++]=b%10; b=b%10; } int sum=0; for(j = 0 ; j < 10 ; j++){//让每个数都乘5次方 sum+=max(shu[j]); } if(i == sum){//如果总和与i相等,输出结果 printf("%d\n", sum); } } return 0; }
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:940 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:588 |
wu-理财计划 (C++代码)浏览:907 |
Hello, world! (C++代码)浏览:1778 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:821 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:866 |
文科生的悲哀 (C语言代码)浏览:1538 |
字符串输入输出函数 (C语言代码)浏览:2604 |
简单的a+b (C语言代码)浏览:618 |
蛇行矩阵 (C语言代码)浏览:559 |
Pluie 2022-11-28 00:30:15 |
你这也太复杂了
Pluie 2022-11-28 00:30:27 |
#include<stdio.h> int main() { int a;//需要寻找的数字 int b;//存放a拆解出来的数字 int c=0;//存放拆解出来数字的五次方和 int t;//代替a进行分解,保持a的不变 for(a=0;a<999999;a++) { t=a; while(t>0) { b=t%10; c+=b*b*b*b*b; t/=10; } if(c==a) { printf("%d是这种数 ",a); } c=0; } return 0; }
Pluie 2022-11-28 00:30:53 |
我这个简洁得多