c语言阶段测试提问
请问为什么下面的代码执行结果不是我想要的。。。我想要计算最大的有由两个 3 位数乘积构成的回文数,求解答。{:5_111:}
#include <stdio.h>
int main()
{
int i, j, k = 0, g = 0;
int max = 0, x, y;
for(i = 999; i > 99; i--)
{
for(j = 999; j > 99; j--)
{
k = i * j;
while (k)//将K倒置
{
g = g * 10 + k % 10;
k = k / 10;
}
if (k == g)
{
break;
}
}
if (max < k) //判断是否为最大的回文数
{
max = k;
x = i;
y = j;
}
}
printf("最大的有由两个三位数乘积构成的回文数:%d\n", max);
printf("%d * %d = %d\n", x, y, max);
return 0;
} 本帖最后由 和光同尘S 于 2019-1-11 22:49 编辑
k = i * j;
while (k)//将K倒置
{
g = g * 10 + k % 10;
k = k / 10;
}
if (k == g)
{
break;
}
@sophisticated
这段有问题,k的值变化了,等到k与g比较时,k已经变成了0,所以始终有问题,循环无法从中间跳出。
可以新建一个变量temp,将k赋值给temp,对temp进行处理得到g,再将g与k进行比较。
和光同尘S 发表于 2019-1-11 22:37
@sophisticated
这段有问题,k的值变化了,等到k与g比较时,k已经变成了0,所以始终有问题,循环无法 ...
按照你说的改了,但好像还是有点问题{:5_99:}
k= temp = i * j;
while (temp)
{
g = g * 10 + temp % 10;
temp = temp / 10;
}
if (k == g)
{
break;
} 本帖最后由 和光同尘S 于 2019-1-12 22:27 编辑
sophisticated 发表于 2019-1-12 13:31
按照你说的改了,但好像还是有点问题
g的初始化为0的位置有问题。
g需要在最里面的循环体内归0,否则g第一次获得值后就会累计下去,永远出错。
for(j = 999; j > 99; j--)
{
int g = 0;//g在这归0
k=i * j;
temp = k;
while (temp)
{
g = g * 10 + temp % 10;
temp = temp / 10;
}
if (k == g)
{
break;
}
改了g代码就正确了。
望采纳。
和光同尘S 发表于 2019-1-12 22:24
g的初始化为0的位置有问题。
g需要在最里面的循环体内归0,否则g第一次获得值后就会累计下去,永远出 ...
感谢指点{:5_106:}
页:
[1]