windlikewest 发表于 2020-2-24 18:41:14

小甲鱼第一阶段测试最后一题,萌新求助。。

找出最大的有由两个三位数乘积构成的回文数
#include<stdio.h>
int main()
{
             long long int c,d=0,e;
                for(c=10000;c<=998001;c++)
                {
                        e=c;
                        d=d*10+c%10;
                        c=c/10;
                }
                if(d==e)
                {
                        printf("%lld\n",c);
                        }
        return 0;
}
求大佬看看我的逻辑哪里不对,为什么编译通过但是输出不了结果。

qiuyouzhi 发表于 2020-2-24 18:48:13

你这个d永远不可能等于e吧
一个越来越大,一个越来越小

windlikewest 发表于 2020-2-24 19:21:14

#include "stdio.h"
int main()
{
    long long int u,m;
    long long int sum=0;
    for(u=10000;u<=998001;u++)
    {
    m=u;
    while(m)
    {
    sum=sum*10+m%10;
    m=m/10;
    }
    if(sum==u)
      {
              printf ("u是回文数");
            printf("\n");
                }
        }
    return 0;
}
更正之后程序还是无输出

qiuyouzhi 发表于 2020-2-24 19:54:32

windlikewest 发表于 2020-2-24 19:21
#include "stdio.h"
int main()
{


你看看甲鱼老师是怎么写的吧

4goodworld 发表于 2020-2-24 21:24:29

本帖最后由 4goodworld 于 2020-2-24 21:43 编辑

题目的要求是:两个三位数乘积构成的回文数
你为啥一定是才结果反推两个三位数,不能从两个三位数正向的寻找吗?
int isPalindromeNumber(int num) {
        int one, two, three, four, five, six;
        six = num / 100000;
        five = (num - six * 100000) / 10000;
        four= (num - six * 100000-five*10000) / 1000;
        three= (num - six * 100000 - five * 10000-four*1000) / 100;
        two=(num - six * 100000 - five * 10000 - four * 1000-three*100) / 10;
        one = (num - six * 100000 - five * 10000 - four * 1000 - three * 100-two*10);
        if (four == three && five == two && six == one) {
                return 1;
        }
        else {
                return 0;
        }
}


int main(){
        //找出最大的有由两个三位数乘积构成的回文数
        int i, j, sum, max, max_i,max_j;
        max_i= max_j=max = 0;
        for (i = 100; i < 999; i++) {
                for (j = 100; j < 999; j++) {
                        sum = i * j;
                        if (isPalindromeNumber(sum)) {
                                if (sum > max) {
                                        max_i = i;
                                        max_j = j;
                                        max = sum;
                                }

                        }



                }
                                          
        }

        printf("最大回文数是:%d * %d = %d", max_i, max_j, max);

        return 0;
}
这是我的思路

Sun-C 发表于 2020-2-24 22:07:32

每次for循环,需要将sum的值重新初始化,否则上一次的sum的值依然保留,导致错误。另外,你更改后的程序的输出还要调整,否则会输出很多u是回文数。

windlikewest 发表于 2020-2-24 22:50:22

4goodworld 发表于 2020-2-24 21:24
题目的要求是:两个三位数乘积构成的回文数
你为啥一定是才结果反推两个三位数,不能从两个三位数正向的寻 ...

感谢大佬,码字辛苦了,我只是想找一种和答案不同的思路,^-^
页: [1]
查看完整版本: 小甲鱼第一阶段测试最后一题,萌新求助。。