鱼C论坛

 找回密码
 立即注册
查看: 1282|回复: 2

关于不进入if判断的理由????

[复制链接]
发表于 2016-12-23 05:36:36 | 显示全部楼层 |阅读模式

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

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

x
话说正好在做第一阶段测试题,最后一题虽然有点脑洞大,但是还是摸索出来了回文数如何判断的代码。但是,当我加入了外部2重循环后,问题就一直无法解决…………

首先,我为了让计算更快,改变了原先的要求,只为了实验代码的正确性。
下面这个代码,是为了求出一个由两个2位数相乘得到的最大的回文数。

给代码:
#include <stdio.h>

int main()
{        //num是用来被判定的数,invert是倒置数
        int num = 0, huiwen = 0, t = 0, invert = 0, i, j;

        for(i = 10; i <= 99; i++)
        {
                for(j = 10; j <= 99; j++)
                {
                        num = i * j;                //用i*j凑出一个num,i和j分别在10~99循环
                        if(num > huiwen)        //判断目前数字是否大于已有的回文数,如果满足再判断是不是回文数
                        {
                                t = num;        //从这里开始是求倒置数
                                while(t)
                                {        
                                        invert = invert * 10 + t % 10;
                                        t = t / 10;
                                }
                                //倒置数求出于invert
                                
                                if(invert == num)        //如果倒置数和原数字相等,就将数值赋予huiwen
                                {
                                        huiwen = invert;
                                }
                        }
                        
                }
        }

        printf("huiwen = %d\n", huiwen);
        
        
        return 0;
}

以上代码,中间求倒置数,到判断回文数一段,我自己单独运行过,可以正常工作,能够找出回文数。
但是外部加了2层循环以及一个if判断之后,就出现问题了;不管我如何修改,调试,都无法找到任何回文数……
最后隔断都打印一下各变量的值以后发现,在num=i*j;之后的那个if语句,一直都不会进入……即便里面的条件是真num>huiwen……我没辙了……只好来这里问问,看谁有时间看一下吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-23 08:59:21 | 显示全部楼层
本帖最后由 lzgw 于 2016-12-23 09:03 编辑

#include <stdio.h>

int main()
{        //num是用来被判定的数,invert是倒置数
        int num = 0, huiwen = 0, t = 0, invert = 0, i, j;
       
        for(i = 10; i <= 99; i++)
        {
                for(j = 10; j <= 99; j++)
                {
                        num = i * j;                //用i*j凑出一个num,i和j分别在10~99循环
                        if(num > huiwen)        //判断目前数字是否大于已有的回文数,如果满足再判断是不是回文数
                        {
                                t = num;        //从这里开始是求倒置数
                                while(t)
                                {        
                                        invert = invert * 10 + t % 10; 问题出在这里
                                        t = t / 10;
                                }
                                //倒置数求出于invert
                               
                                if(invert == num)        //如果倒置数和原数字相等,就将数值赋予huiwen
                                {
                                        huiwen = invert;
                                }
                        }
                        invert = 0;这里没有清零,保存上次的值,加上这句你再试试
                }
        }
       
        printf("huiwen = %d\n", huiwen);
       
       
        return 0;
}

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zealstar + 1 + 1 拜谢救命之恩~!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-12-23 19:33:58 | 显示全部楼层

啊!!!,原来如此,因为invert一直在累加,所以,循环就不可能出现huiwen == invert的情况了……



无论如何,十分感谢你!!!真心的,这个程序闹了我1天了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 01:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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