萌新求帮助
编写程序,求出所有各位数字的立方和等于1099的3位数实在找不出来哪里有问题{:5_107:}
谢谢大佬们
#include<stdio.h>
int main()
{
int i,n=1099,a,p,num=0;
for(i=100;i<1000;i++)
{
int c=i;
for(p=0;p<3;p++)
{
a=i%10;
i=i/10;
num=num+(a*a*a);
}
if(num==n)
{
printf("%d\n",c);
}
}
system("pause");
return 0;
} 这逻辑好乱啊 首先揣摩楼主的意思,是想将个位、十位、百位分别放入整型数组的元素a 、a 、a。
三个变量,我感觉不需要整型数组,用了整型数组求立方会多一层循环。还不如直接定义三个整型变量存放个位、十位、百位。最后附上代码,希望能帮到你...
#include <stdio.h>
#include <math.h>
int main()
{
//求出所有各位数字的立方和等于1099的3位数
int ge = 0, shi = 0, bai = 0;
int sum = 0, count = 0;
for (int num = 100; num < 1000; num++)
{
bai = num /100; //分离百位数字
shi = num % 100 / 10; //分离十位数字
ge = num % 10; //分离个位数字
sum = pow(bai, 3) + pow(shi, 3) + pow(ge, 3);
if (1099 == sum)
{
count++;
printf ("%d ", num);
}
}
printf ("\n");
if (count > 0)
printf ("符合条件的三位数共有%d个\n", count);
else
printf ("没有符合条件的三位数\n");
return 0;
} 调试了一下,你的代码有几个问题:
1.
在外层for循环中,看起来i是从100递增到999,但是经过内层循环,i已经连续对10取余3次了,这时候i只是原本三位数中百位上的数字。
第一次循环之后,i从开始的100,变成了1,然后再走外循环i++,第二次外循环开始的时候i已经变成2,而不是预想当中的101。
2.
在循环中,num变量是用来表示这个3位数各位上的立方和,但是每一次新的遍历开始,你并没有重置num,导致num一直在积累数据,当然得不到答案。
具体可以看下面代码进行对比,其实可以只把我的那几条注释代码添加到你自己的代码中,自己调试发现问题就比较直观
#include<stdio.h>
int main(void){
int i,n=1099,a,p,num=0;
for(i=100;i<1000;i++){
int t=i, num=0;
// printf("i= %d\n", i);
for(p=0;p<3;p++){
a=t%10;
// printf("a[%d]: %d\n", p, a);
t=t/10;
num=num+(a*a*a);
}
// printf("%d%d%d\n",a, a, a);
// printf("%d%d%d of num: %d\n", a, a, a, num);
if(num==n){
printf("%d\n",i);
}
}
return 0;
}
#include <stdio.h>
// 编写程序,求出所有各位数字的立方和等于1099的3位数
int F(int num){
int a, b, c;
a = num / 100;
b = (num % 100) / 10;
c = num % 10;
return a*a*a + b*b*b + c*c*c;
}
int main(){
for(int num = 100; num < 1000; num++){
if(F(num) == 1099){
printf("%d\n", num);
}
}
return 0;
}379
397
739
793
937
973
页:
[1]