2016-03-21 26 views
-2
  1. この行(コードを参照してください)が実行されていない理由を知るのに手伝ってください。
  2. 私は3桁の最大Palindrome Numberを見つけようとしています。

#include <stdio.h> 

int main() 
{ 
    long int n, reverse=0, rem,temp, max_palindrom = -1; 
    int i, j; 

    for (i = 100; i <= 999; i++) 
    { 

     for (j = 100; j <= 999; j++) 
     { 
      n = 1*j; 

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

      if(reverse==n) 
      { 

       printf("DDDDD"); // < === not executing 

      } 

     } 
    } 

    printf("%d ", max_palindrom); 
    return 0; 
} 
+0

printf( "DDDDD")が実行されないのはなぜですか?本質的に、条件「逆== n」は決して真にならないからです。どのようにそれは本当ですか? 'if(reverse == n)'の条件の上にprintf()文を挿入し、reverseとnの値をチェックします。これはあなたがデバッグする方法です。 –

+0

ええ、私は、基本的にデバッグ作業を行う前にSOに投稿していますので、これをdownvotingしています。 –

答えて

0

新しい番号をしようとするときは、ゼロにreverseバックをリセットされていません。だから、数字はプログラム全体の中で連続的に加えられ、回文と同じにならない。

てみてください。このような第二のループ内でそれを再初期化:

for (j = 100; j <= 999; j++) 
{ 
    reverse = 0; 
    ... 

あり、あなたのコードを持つ他の問題も同様ですが、あなたは最終的にそれらを見つけることができます。

0

junjanes氏は、逆変数をリセットする必要があると述べています。そしてなぜ2つを使用してfor loop十分です。

参考までに、この変更されたものを参照してください。

#include <stdio.h> 

int main() 
{ 
int n, reverse=0, rem,temp, max_palindrom = -1; 
int i, j; 

for (j = 100; j <= 999; j++) 
{ 
    n=j; 
    temp=n; 
    while(temp!=0) 
    { 
    rem=temp%10; 
    reverse=reverse*10+rem; 
    temp/=10; 
    } 
    if(reverse==n) 
    { 

    printf("DDDDD"); // < === not executing 

    printf("%d\n", reverse); 
    } 
    if(max_palindrom<reverse) 
    { 
    max_palindrom=reverse; 
    } 
    reverse=0; 
    } 

    printf("%d ", max_palindrom); 
    return 0; 
} 
関連する問題