GumpYu 发表于 2019-3-1 22:14:30

新手的每日一问

#include <stdio.h>

int main()
{
        int i,j,max =0,temp = 0;
        int result = 0;

       
        for (i = 100;i<=999;i++)
        {
                for(j = 100;j<=999;j++)
                {
                        result = i*j;
                        while(result)
                        {
                                temp = temp*10 + result%10;
                                result /= 10;
                        }
                       
                        if (temp == result)
                        {
                                if (temp>max)
                                {
                                        max = temp;
                                       
                                }
                        }
                        else
                        {
                                continue;
                        }
                }
        }
        printf("%d",max);
        return 0;
}

为什么我的max 结果始终都是0呢?,不能求出由两个 3 位数乘积构成的回文数{:10_334:}

cookies945 发表于 2019-3-1 22:22:19

while(result)
                        {
                              temp = temp*10 + result%10;
                              result /= 10;
                        }
                        //在这里,你的result已经是零了
                        if (temp == result)


那么if语句就无论如何也不会执行,所以max就不会改变

GumpYu 发表于 2019-3-2 10:04:54

cookies945 发表于 2019-3-1 22:22
while(result)
                        {
                              temp = temp*10 + result%1 ...

哦哦哦,谢谢

cookies945 发表于 2019-3-2 10:55:16

GumpYu 发表于 2019-3-2 10:04
哦哦哦,谢谢

嗯一起加油学习啊

GumpYu 发表于 2019-3-3 17:21:24

cookies945 发表于 2019-3-2 10:55
嗯一起加油学习啊

那为什么我增加了一个变量把result替换了之后结果还是等于0
#include <stdio.h>

int main()
{
        int i,j,max =0,temp = 0;
        int result = 0;
        int result_0 = 0;

       
        for (i = 100;i<=999;i++)
        {
                for(j = 100;j<=999;j++)
                {
                        result = i*j;
                        result_0 = result;
                        while(result)
                        {
                                temp = temp*10 + result%10;
                                result /= 10;
                        }
                       
                        if (temp == result_0)
                        {
                                if (temp>max)
                                {
                                        max = temp;
                                       
                                }
                        }
                        else
                        {
                                continue;
                        }
                }
        }
        printf("%d",max);
        return 0;
}{:10_266:}

82457097 发表于 2019-3-3 17:44:52

楼主能不能解释一下 你这每一步的逻辑是干嘛 就单看这部分
               while(result)
                        {
                              temp = temp*10 + result%10;//这个temp的值 几次循环之后数值就会溢出 而且这个循环设计的意义是干什么?
                              result /= 10;
                        }

润木 发表于 2019-3-3 18:32:06

82457097 发表于 2019-3-3 17:44
楼主能不能解释一下 你这每一步的逻辑是干嘛 就单看这部分

我也没理解这步有什么用。。。你最终输出的max值是和temp值相同的,如果你程序的目的是为了求两个三位数乘积为回文数,那么temp值应该和一开始的result、值是一样的啊,可是你这步应该不可能使temp和一开始乘积的result值相同吧

GumpYu 发表于 2019-3-3 19:17:16

润木 发表于 2019-3-3 18:32
我也没理解这步有什么用。。。你最终输出的max值是和temp值相同的,如果你程序的目的是为了求两个三位数 ...

得到回文输出的数啊

GumpYu 发表于 2019-3-3 19:24:21

润木 发表于 2019-3-3 18:32
我也没理解这步有什么用。。。你最终输出的max值是和temp值相同的,如果你程序的目的是为了求两个三位数 ...

{:10_266:}好像是的,我自己脑袋混乱了。。。我还是重新写这个代码{:10_250:}
页: [1]
查看完整版本: 新手的每日一问