此程序未显示153为Armstrong编号,而对于其他编号,输出正确。就像我检查407一样,它给出了正确的答案,但是当我检查153时,它显示的不是阿姆斯特朗号码。
#include <stdio.h>
#include <math.h>
int main() {
int no, copy, re, n = 0, ans = 0;
printf("\n\tEnter a new number: ");
scanf("%d", &no);
copy = no;
while (copy != 0) {
copy = copy / 10;
n++;
}
copy = no;
while (copy != 0) {
re = copy % 10;
ans = ans + pow(re, n);
copy = copy / 10;
}
if (ans == no) {
printf("\n\t %d is an Armstrong number", no);
} else {
printf("\n\t %d is not an Armstrong number", no);
}
getch();
return 0;
}
答案 0 :(得分:1)
首先,您需要为变量
指定正确的名称试试这个代码它适用于我
#include <stdio.h>
#include <math.h>
int main()
{
int number, originalNumber, remainder, result = 0, n = 0 ;
printf("Enter an integer: ");
scanf("%d", &number);
originalNumber = number;
while (originalNumber != 0)
{
originalNumber /= 10;
++n;
}
originalNumber = number;
while (originalNumber != 0)
{
remainder = originalNumber%10;
result += pow(remainder, n);
originalNumber /= 10;
}
if(result == number)
printf("%d is an Armstrong number.", number);
else
printf("%d is not an Armstrong number.", number);
return 0;
}
在此计划中,首先计算number of digits of an integer
并将其存储在n
变量中。
pow()
函数用于计算while
循环每次迭代中各个数字的幂。
答案 1 :(得分:0)
您的代码没有问题。它工作正常。编译代码gcc -o file filename.c -lm
并运行./file
以避免链接问题。
答案 2 :(得分:0)
答案 3 :(得分:0)
您的算法是正确的,并且您的程序在我的系统上按预期执行(缺少换行符除外)。如果您的系统报告153为不是阿姆斯壮的数字,则它会被破坏,可能是因为将数字提升到第n次幂的浮点运算。试试这个替代方案:
#include <stdio.h>
#include <math.h>
int main(void) {
int no, copy, re, i, d, n = 0, ans = 0;
printf("Enter a new number: ");
if (scanf("%d", &no) == 1) {
copy = no;
while (copy != 0) {
copy = copy / 10;
n++;
}
copy = no;
while (copy != 0) {
d = copy % 10;
for (re = d, i = 1; i < n; i++) {
re *= d;
}
ans = ans + re;
copy = copy / 10;
}
if (ans == no) {
printf("%d is an Armstrong number\n", no);
} else {
printf("%d is not an Armstrong number\n", no);
}
getch();
}
return 0;
}
答案 4 :(得分:0)
在这种情况下,不能使用内置的“电源”功能。相反,您可以使用以下代码:
int power(int n,int r)
{
int i,p=1;
for(i=1;i<=r;i++)
p=p*n;
return p;
}
并在您的主函数中调用
result += power(remainder, n);
它适用于所有情况。