zealstar 发表于 2016-12-23 05:36:36

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

话说正好在做第一阶段测试题,最后一题虽然有点脑洞大,但是还是摸索出来了回文数如何判断的代码。但是,当我加入了外部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……我没辙了……只好来这里问问,看谁有时间看一下吧。{:10_266:}

lzgw 发表于 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;
}

zealstar 发表于 2016-12-23 19:33:58

lzgw 发表于 2016-12-23 08:59
#include

int main()


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

{:10_266:}{:10_266:}{:10_266:}

无论如何,十分感谢你!!!真心的,这个程序闹了我1天了!{:10_284:}
页: [1]
查看完整版本: 关于不进入if判断的理由????