0

これは非常に複雑なコードですが、ご了承ください。

このコードは、回文をチェックするために使用されます。私が抱えている問題は、別の関数やループから関数を呼び出す方法がわからないことです。

これは問題の行です:

if (new_num != rev)
    {
      while (higher != calc_reverse(higher) && lower != calc_reverse(lower))
    {
      higher = calc_reverse(number++);
      lower = calc_reverse(number--);
    }

以下は、エラーに関係する私のプログラムの後半のコードです。これを使用すると、コードを強制終了するまで無限ループで「rev (number)」を印刷するだけです。

//Function Declaration
int calc_reverse(int new_num)
 {
 //Local Declarations
  int count = 0; // number of digits in the number
  int rev = 0; //the reverse of the number
  int last; //the last digit of the number

 //Calulations
  while (new_num > 0)
   {
  last = new_num % 10;
  rev = last + (rev * pow(10, count));
  new_num = new_num / 10;
  count++;
   }
  printf("rev %d \n", rev);
  fflush(stdout);
  return(rev);
 }

//function Decleration
void calc_closest(int count, int new_num, int rev, int  number)
{
 //Local declerations
   int higher = 12; //the higher palindrome
   int lower = 12; // the lower palindrome

   printf(" %d, %d \n", new_num, rev);
   fflush(stdout);
 //Calculations
   if (new_num == rev)
    {
      printf("The value input (%d) is a compact palindrome. \n", number);
    }

   if (new_num != rev)
    {
      while (higher != calc_reverse(higher) && lower != calc_reverse(lower))
    {
      higher = calc_reverse(number++);
      lower = calc_reverse(number--);
    }
   if (higher == new_num && lower == new_num)
    {
      printf("Closest palindromes to %d are: %d, %d \n", number, lower, higher);
    }
   else if(higher == new_num)
    {
      printf("Closest palindromes to %d are: %d \n", number, higher);
    }
   else if (lower == new_num)
    {
      printf("Closest palindromes to %d are: %d \n", number, lower);
    }
    }
    return;
}
4

1 に答える 1

1

同じ変数「number」を使用して、上 (number++) と下 (number--) の両方をカウントしています。

それはうまくいきません。1 を足してから 1 を引くと、最初と同じ数が残り、無限ループに陥ります。

2 つの個別の変数を使用する必要があります。

または、1 つの昇順カウンターのみを使用して、高い数値と低い数値の両方を計算することもできます。例: i=0,1,2,3...、大きい方:数値+i、小さい方:数値-i。ここでの「数値」は初期値から変わることはありません。

于 2013-03-24T22:47:15.967 に答える