gpt4 book ai didi

c - 确定一个数字是否为阿姆斯壮数字的问题

转载 作者:太空狗 更新时间:2023-10-29 16:04:00 24 4
gpt4 key购买 nike

我正在尝试检查用户提供的号码是否为 armstrong number .不过出了点问题,我想不通。

感谢任何帮助。

下面附上代码。

#include<stdio.h>

int fun(int);

int main()
{
int x,a,b,y=0;

printf("enter the number you want to identify is aN ARMSTRONG OR NOT:");
scanf("%d",&a);

for(int i=1 ; i<=3 ; i++)
{
b = a % 10;
x = fun(b);
y = x+y;
a = a/10;
}

if(y==a)
printf("\narmstrong number");
else
printf("\nnot an armstrong number");

return 0;
}

int fun(int x)
{
int a;
a=x*x*x;
return (a);
}

最佳答案

主要问题是您没有记录开始时使用的号码。你将 a 重复除以 10(它以 0 结尾),然后将 0 与 153 进行比较。它们不相等。

你的另一个问题是你不能寻找 4 位或更长的阿姆斯壮数字,也不能寻找 1 以外的 1 位数字。你的函数 fun() 最好命名为 立方体();在我下面的代码中,它被重命名为 power() 因为它被泛化为处理 N 位数字。


我决定,对于所考虑的权力范围,没有必要为 power() 使用更复杂的算法 - 除以二等。这样可以节省6-10 位数字,但您无法在这种情况下对其进行测量。如果使用 -DDEBUG 进行编译,它会包含诊断打印 - 它用于让我确信我的代码工作正常。另请注意,答案与输入相呼应;这是确保您获得正确行为的基本技术。我将代码封装到一个函数中,以测试一个数字是否是阿姆斯特朗数字,该函数从主程序中迭代调用。这使得测试更容易。我在 scanf() 中添加了检查以防止出现问题,这是另一种重要的基本编程技术。

我已经检查了最多为 146511208 的大多数阿姆斯特朗号码,它似乎是正确的。 370 和 371 这对很有趣。

#include <stdio.h>
#include <stdbool.h>

#ifndef DEBUG
#define DEBUG 0
#endif

static int power(int x, int n)
{
int r = 1;
int c = n;
while (c-- > 0)
r *= x;
if (DEBUG) printf(" %d**%d = %d\n", x, n, r);
return r;
}

static bool isArmstrongNumber(int n)
{
int y = 0;
int a = n;
int p;
for (p = 0; a != 0; a /= 10, p++)
;
if (DEBUG) printf(" n = %d, p = %d\n", n, p);
a = n;
for (int i = 0; i < p; i++)
{
y += power(a % 10, p);
a /= 10;
}
return(y == n);
}

int main(void)
{
while (1)
{
int a;
printf("Enter the number you want to identify as an Armstrong number or not: ");
if (scanf("%d", &a) != 1 || a <= 0)
break;
else if (isArmstrongNumber(a))
printf("%d is an Armstrong number\n", a);
else
printf("%d is not an Armstrong number\n", a);
}

return 0;
}

关于c - 确定一个数字是否为阿姆斯壮数字的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6170411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com