【发布时间】:2021-04-03 00:26:16
【问题描述】:
阿姆斯壮数是一个数字,等于其数字的立方和。例如,0、1、153、370、371 和 407 是 Armstrong 数字。
我用这种方式试过这个程序-
// Program to check whether number is Armstrong number or not
#include<stdio.h>
int main()
{
int a,r,sum=0,temp;
//accepting input from user
printf("Enter a number to check whether it is Armstrong number: ");
scanf("%d", &a);
//condition for checking if sum of individual numbers cube is equal to number
do
{
r = a % 10;
sum += r*r*r;
a = a/10;
} while (a>0);
//printing final result.
if(temp == sum)
{printf("It is Armstrong Number.");}
else
{
printf("It is not Armstrong Number.");
}
return 0;
}
在这里,我总是得到不是阿姆斯壮数字的结果,所以我检查了互联网,他们使用临时变量来存储输入数字。为什么这是必要的? 添加临时变量如何使代码工作?还有什么其他错误? 这是有效的代码:-
// Program to check whether number is Armstrong number or not
#include<stdio.h>
int main()
{
int a,r,sum=0,temp;
//accepting input from user
printf("Enter a number to check whether it is Armstrong number: ");
scanf("%d", &a);
temp = a;
//condition for checking if sum of individual numbers cube is equal to number
do
{
r = a % 10;
sum += r*r*r;
a = a/10;
} while (a>0);
//printing final result.
if(temp == sum)
{printf("It is Armstrong Number.");}
else
{
printf("It is not Armstrong Number.");
}
return 0;
}
【问题讨论】:
-
temp未经初始化就使用,并且在第一个代码中调用了 undefined behavior。 -
a = a/10;更改存储在变量a中的值。由于您想将立方体的总和与原始数字进行比较,因此您需要将此数字保留在某个地方。这恰好是第二个代码 sn-p 中名为temp的变量。您也可能应该检查输入的数字是否为负数...