鱼C论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 87|回复: 4

[已解决]c语言阶段测试提问

[复制链接]
最佳答案
0 
发表于 2019-1-11 21:46:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请问为什么下面的代码执行结果不是我想要的。。。
我想要计算最大的有由两个 3 位数乘积构成的回文数,求解答。

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int i, j, k = 0, g = 0;
  5.         int max = 0, x, y;
  6.        
  7.         for(i = 999; i > 99; i--)
  8.         {
  9.                 for(j = 999; j > 99; j--)
  10.                 {
  11.                         k = i * j;
  12.                        
  13.                         while (k)//将K倒置
  14.             {
  15.                 g = g * 10 + k % 10;
  16.                 k = k / 10;
  17.                         }
  18.                
  19.                         if (k == g)
  20.                         {
  21.                         break;
  22.                         }
  23.                        
  24.                 }
  25.                
  26.                 if (max < k) //判断是否为最大的回文数
  27.                 {
  28.                         max = k;
  29.                         x = i;
  30.                         y = j;
  31.                 }
  32.                
  33.                
  34.         }
  35.        
  36.         printf("最大的有由两个三位数乘积构成的回文数:%d\n", max);
  37.         printf("%d * %d = %d\n", x, y, max);
  38.        
  39.         return 0;
  40. }
复制代码
最佳答案
2019-1-11 22:37:22
本帖最后由 和光同尘S 于 2019-1-11 22:49 编辑
  1. k = i * j;
  2.                         
  3.     while (k)//将K倒置
  4.     {
  5.         g = g * 10 + k % 10;
  6.         k = k / 10;
  7.     }
  8.                
  9.     if (k == g)
  10.     {
  11.         break;
  12.     }
复制代码


@sophisticated
这段有问题,k的值变化了,等到k与g比较时,k已经变成了0,所以始终有问题,循环无法从中间跳出。

可以新建一个变量temp,将k赋值给temp,对temp进行处理得到g,再将g与k进行比较。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
2 
发表于 2019-1-11 22:37:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 和光同尘S 于 2019-1-11 22:49 编辑
  1. k = i * j;
  2.                         
  3.     while (k)//将K倒置
  4.     {
  5.         g = g * 10 + k % 10;
  6.         k = k / 10;
  7.     }
  8.                
  9.     if (k == g)
  10.     {
  11.         break;
  12.     }
复制代码


@sophisticated
这段有问题,k的值变化了,等到k与g比较时,k已经变成了0,所以始终有问题,循环无法从中间跳出。

可以新建一个变量temp,将k赋值给temp,对temp进行处理得到g,再将g与k进行比较。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-1-12 13:31:24 | 显示全部楼层
和光同尘S 发表于 2019-1-11 22:37
@sophisticated
这段有问题,k的值变化了,等到k与g比较时,k已经变成了0,所以始终有问题,循环无法 ...

按照你说的改了,但好像还是有点问题
  1.         k= temp = i * j;
  2.                                
  3.                         while (temp)
  4.                     {
  5.                         g = g * 10 + temp % 10;
  6.                         temp = temp / 10;
  7.                         }
  8.                
  9.                         if (k == g)
  10.                         {
  11.                                 break;
  12.                         }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
2 
发表于 2019-1-12 22:24:16 | 显示全部楼层
本帖最后由 和光同尘S 于 2019-1-12 22:27 编辑
sophisticated 发表于 2019-1-12 13:31
按照你说的改了,但好像还是有点问题


g的初始化为0的位置有问题。
g需要在最里面的循环体内归0,否则g第一次获得值后就会累计下去,永远出错。

  1. for(j = 999; j > 99; j--)
  2.                 {
  3.                     int g = 0;  //g在这归0
  4.                    k=  i * j;
  5.                     temp = k;            
  6.                     while (temp)
  7.                                         {
  8.                     g = g * 10 + temp % 10;
  9.                     temp = temp / 10;
  10.                     }
  11.                
  12.                     if (k == g)
  13.                     {
  14.                         break;
  15.                     }
复制代码


改了g代码就正确了。
望采纳。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-1-13 08:30:00 | 显示全部楼层
和光同尘S 发表于 2019-1-12 22:24
g的初始化为0的位置有问题。
g需要在最里面的循环体内归0,否则g第一次获得值后就会累计下去,永远出 ...

感谢指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2019-6-20 05:01

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表