0

这是一个非常复杂的代码,但请耐心等待。

此代码用于检查回文。我遇到的问题是不知道如何从另一个函数和循环中调用函数。

这是有问题的行:

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

下面是涉及错误的程序后半部分的代码。当我使用它时,我只会在无限循环中打印“rev(数字)”,直到我强制结束代码。

//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--)。

那是行不通的。当您加一然后减一时,您会得到与开始时相同的数字,从而使您陷入无限循环。

您将需要使用两个单独的变量。

或者,您可以只使用一个升序计数器来计算较大的数字和较小的数字。例如:i=0,1,2,3...,更高:number+i,更低:number-i。这里的“数字”永远不会改变初始值。

于 2013-03-24T22:47:15.967 回答