这是一个在1-1000之间找到阿姆斯壮数字的程序(该数字的每个数字的立方和等于该数字本身),它可以正确打印某些数字,但不能打印153。 我的问题是,为什么排除153案? 预先谢谢你。
#include<stdio.h>
#include<math.h>
void main()
{
int i,save,rem;
for(i=1;i<1000;i++)
{
int s=0;
int save=i; /*Creating copy of the
variable i.*/
while(save!=0)
{
rem=save%10;
save/=10;
s+=pow(rem,3.0);
}
if(i==s) //Comparing i with the sum.
printf("\n%d",i); //Printing armstrong number.
}
}
答案 0 :(得分:0)
在Windows 7上使用gcc可与pow一起使用。但是,此代码可能对您有用,以避免使用pow()舍入。
此代码还简化了循环并删除了对save的重新声明。
#include <stdio.h>
int main(void) {
int i, sum, ones, tens, hunds;
for(i = 1; i < 1000; i++) {
sum = i/10;
ones = i%10;
tens = sum%10;
hunds = sum/10;
sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;
if(i == sum)
printf("\n%d", i);
}
}
根据@Brij Raj Kishore的评论,如果该帖子确实打算显示所有阿姆斯特朗数字1-1000,请用以下内容代替上面的循环。
for(i = 1; i < 1000; i++) {
sum = i/10;
ones = i%10;
tens = sum%10;
hunds = sum/10;
if(!(hunds | tens))
sum = ones;
else if (hunds == 0 && tens != 0)
sum = ones*ones + tens*tens;
else
sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;
if(i == sum)
printf("\n%d", i);
}
答案 1 :(得分:0)
我在您的程序中做了一些修改,例如打印1位数字,因为它们是阿姆斯壮数字,并且避免了浮点幂函数以及其他小的更改,这些更改可以在代码的注释中看到。
#include<stdio.h>
#include<math.h>
void main()
{
int i,save,rem;
for(i=1; i<= 1000;i++)
{
int s=0;
int save=i; /*Creating copy of the variable i.*/
while(save!=0)
{
rem=save%10;
save/=10;
int temp = rem;
for(int j = 1; j < 3; ++j) { // power function
rem = rem * temp;
}
s+=rem;
}
if(i==s) //Comparing i with the sum.
printf("%d\n",i); //Printing armstrong number.
}
}
输出
1 153 370 371 407
编辑:我已根据OP定义的阿姆斯壮编号进行了更改