更新时间2021-06-30 05:43:32
请问这个代码哪里有问题,初学者 请大佬解答一下#include <stdio.h> void main() { int a,b,c,d,num,num1,num2,num3; for(a=100;a<1000;a++) { for (b=1;b<a/100;b++) //百位阶乘 num1=1; num1*=b; for (c=1;c<a/10%10;c++) //十位阶乘 num2=1; num2*=c; for(d=1;d<a%10;d++) //个位阶乘 num3=1; num3*=d; num=num1+num2+num3; //阶乘相加 if(a==num) //判断是否相等 { printf("%d ",a); } } }
问题1、b<a/100、c<a/10%10、d<a%10,意味着 b < 9,c < 9,d < 9,这样888以上的数就无法验证了;
问题2、c = 1、d = 1,当 a 的十位或个位是 0、1 时,不满足 c<a/10%10、d<a%10,循环体不执行,所以 十位或个位是 0、1的数无法验证;
因为 0! = 1,有意义,所以不应忽略十位或个位是 0 的数 。
同样,b = 1,百位是 1 时,不满足 b<a/100 ,循环体不执行,所以 百位是 1 的数无法验证;
本题正确答案是 145,恰好百位是1,所以程序运行得不到正确答案。
这个三位数是145【唯一】
1!+4!+5!=1+24+120=145
上一篇:用一元二次方程解