我有这个问题,这个号码没有被识别为阿姆斯特朗号码。我尝试输入153这是一个阿姆斯特朗号码,不能被识别为一个号码。我正在学习C.任何帮助都会很好。
#include <stdio.h>
int main()
{
int x[3],a,b,c,temp;
int temp2 = 0;
printf("Enter a supposed Armstrong number: ");
scanf("%d",&x);
for(int i =0;i<3;i++)
{
temp = x[i]*x[i]*x[i];
temp2 = temp2 + temp;
}
if(temp2 == x)
{
printf("This is an Armstrong number!");
}
else
{
printf("This is not an Armstrong number!");
}
}
答案 0 :(得分:3)
TL; DR - 要存储3位整数值,您不需要具有3 int
s的数组。
在您的代码中,x
是一种数组类型,并且您使用它的方式,只有x[0]
获得有效值,x[1]
和x[2]
未被初始化。因此,您的代码会生成undefined behavior。
我相信,你不需要有一个数组,而是使用模运算符逐个提取每个数字并继续计算。
答案 1 :(得分:1)
关于你的代码x是一个整数类型的数组。因此,整数类型数组不像char类型数组那样工作。 char类型数组采用基址,它仍然打开util'\ 0'(null)char is found.it是为scanf()定义的。但对于int类型数组,你需要手动定义数组在内存中的特定位置存储输入。
所以,你必须像这样使用=&gt;
#include <stdio.h>
int main(){
int x[3],n,r,c,temp,i;
int temp2 = 0;
printf("Enter a supposed Armstrong number: ");
scanf("%d",&n);
c=n;
for(i =0;i<3;i++){
x[i]=n%10;
n=n/10;
temp = x[i] * x[i] * x[i];
temp2 = temp2 + temp;
}
if(temp2 == c){
printf("This is an Armstrong number!");
}
else{
printf("This is not an Armstrong number!");
}
return 0;
}
答案 2 :(得分:0)
首先将输入转换为int类型的单个变量,然后在将它们分解为%运算符后将其存储在数组中,然后您就可以找到Armstrong数字。 E.g
int x=153;
int y[3];
for(int i=2;i>=;i--)
{
y[i]=x%10;
x=x/10;
}
在此步骤之后,您的循环将正常工作
答案 3 :(得分:0)
谢谢大家,真的很有帮助。我需要为一个迷你项目做这个。我决定这样做,因为这似乎是最简单的方法。
#include <stdio.h>
int main()
{
int x,y,z,temp;
int temp2 = 0;
printf("Enter a supposed Armstrong number: ");
scanf("%d",&x);
z = x;
for(int i =0;i<3;i++)
{
y = x%10;
temp = y*y*y;
temp2 = temp2 + temp;
x = x/10;
}
if(temp2 == z)
{
printf("This is an Armstrong number!");
}
else
{
printf("This is not an Armstrong number!");
}
}
答案 4 :(得分:-3)
#include<stdio.h>
int main()
{
int x[3],y,temp;
int temp2 = 0;
temp=y;
printf("Enter a supposed Armstrong number: ");
scanf("%d",&y);
for(int j=2;j>=0;j--){
x[j]=temp%10;
temp=temp/10;
}
for(int i =0;i<3;i++)
{
temp = x[i]*x[i]*x[i];
temp2 = temp2 + temp;
}
if(temp2 == x)
{
printf("This is an Armstrong number!");
}
else
{
printf("This is not an Armstrong number!");
}
}
现在这段代码可以完美运行。