2016-06-27 7 views
-1

私は与えられた数かどうかを見つけるためのプログラムを書いているがArmstrong Numberです:私はそれを実行するとファインディング・アームストロングナンバー使用してC++

int main() 
{ 
    int n,rem,sum=0; 
    cout<<"Enter the Number for checking"<<endl; 
    cin>>n; 

    while(n!=0) 
    { 
     rem=n%10; 
     sum=sum+(rem*rem*rem); 
     n=n/10; 
    } 

    if(sum==n) 
    { 
     cout<<"Armstrong Number"<<endl; 
    } 
    else 
    { 
     cout<<"It's not a armstrong number"; 
    } 

    return 0; 
} 

が、それは常に報告入力に関わらず、「これは、アームストロングの番号ではありません」 。

コードを次のように変更し、正しい結果を得ました。しかし、なぜ私はn1に入力を割り当てて操作を行う必要があるのか​​理解できません。なぜnで直接操作できませんか?あなたのプログラムがsumnを比較if (sum==n)ラインで

int main() 
{ 
    int n,rem,sum=0,n1; 
    cout<<"Enter the Number for checking"<<endl; 
    cin>>n; 
    n1=n; 

    while(n1!=0) 
    { 
     rem=n1%10; 
     sum=sum+(rem*rem*rem); 
     n1=n1/10; 
    } 

    if(sum==n) 
    { 
     cout<<"Armstrong Number"<<endl; 
    } 
    else 
    { 
     cout<<"It's not a armstrong number"; 
    } 

    return 0; 
} 

答えて

4

。 2番目のプログラムでは、nはユーザーが入力した最初の番号です。しかし、最初のプログラムn==0(上のループを参照)。

したがって、最初のプログラムでは、if (sum==n)のチェックはif (sum==0)として機能します。しかし、sumの値は0になりません(ユーザーが0を入力した場合を除く)。したがって、最初のプログラムは常に「それはアームストロングナンバーではない」と返します。

スタイルについて:ロジック全体を1つのmain()関数に入れるのではなく、関数を使用するほうがはるかに優れています。あなたのプログラムがはるかに簡単になりますと、あなたが最初に持ってミスを犯すのは難しいだろう。この場合、

int getSumOfCubesOfDigits(int n) 
{ 
    int sum = 0; 
    while (n) 
    { 
     const int rem = n % 10; 
     sum += rem * rem * rem; 
     n = n/10; 
    } 
} 

:たとえば、あなたはアームストロング数のchechingのための中間和を計算するための関数を作成することができますあなたの質問のプログラム:

int main() 
{ 
    int n; 
    cout << "Enter the Number for checking" << endl; 
    cin >> n; 
    if(getSumOfCubesOfDigits(n) == n) 
     cout<<"Armstrong Number"<<endl; 
    else 
     cout<<"It's not a armstrong number"; 
    return 0; 
} 
1

どの番号を比較しますか? whileループの最初のプログラムでは、nの値が変更され(この変数では入力が得られます)、最終的にsum == nでチェックされるため、常に条件が失敗します。

変数が必要とされる温度(N1)だから、最終的な結果を比較する

0

あなたのコードは、2番目のコードブロックで異なっている、あなたはまだ合計= nの場合はテストしています。

2番目のコードブロックで、(sum = n1)をテストすると、同じことが起こると思われます。

2

最初のプログラムでは、元の番号が 'n'に入力されます。あなたのロジックの唯一の問題は、あなたがwhileループを終了するまでに忘れてしまったことです。n = n/10を繰り返し実行しているので、 'n'アームストロング数であっても決して満たされません。

したがって、whileループを開始する前に、元の数値を別の変数、たとえばn1(保存した2番目のプログラムのように)に保存し、n1 = n1/10という操作のみn1を使用します。最後に 'n'には元の数字が含まれていますので、最後に 'sum'と比較して答えを見つけることができます。

関連する問題