检测阿姆斯壮数的问题

时间:2015-11-28 11:33:56

标签: c arrays

我有这个问题,这个号码没有被识别为阿姆斯特朗号码。我尝试输入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!"); 
    }
}

5 个答案:

答案 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!"); 
    }

 }

现在这段代码可以完美运行。