这是一个非常复杂的代码,但请耐心等待。
此代码用于检查回文。我遇到的问题是不知道如何从另一个函数和循环中调用函数。
这是有问题的一行:
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;
}
答案 0 :(得分:1)
您使用相同的变量“number”来计算向上(数字++)和向下数字(数字 - )。
那不行。当你添加一个然后减去一个时,你就会得到与你开始时相同的数字,让你处于无限循环中。
您需要使用两个单独的变量。
或者,您只能使用一个递增计数器,您可以从中计算较高的数字和较低的数字。例如:i = 0,1,2,3 ......,更高:数字+ i,更低:数字-i。这里的“数字”永远不会从初始值改变。