鱼C论坛

 找回密码
 立即注册
查看: 1484|回复: 6

[已解决]小甲鱼第一阶段测试最后一题,萌新求助。。

[复制链接]
发表于 2020-2-24 18:41:14 | 显示全部楼层 |阅读模式

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

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

x
找出最大的有由两个三位数乘积构成的回文数
#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;
}
求大佬看看我的逻辑哪里不对,为什么编译通过但是输出不了结果。
最佳答案
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;
}
这是我的思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 18:48:13 | 显示全部楼层
你这个d永远不可能等于e吧
一个越来越大,一个越来越小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
更正之后程序还是无输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 19:54:32 | 显示全部楼层
windlikewest 发表于 2020-2-24 19:21
#include "stdio.h"
int main()
{

你看看甲鱼老师是怎么写的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
这是我的思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 22:07:32 | 显示全部楼层
每次for循环,需要将sum的值重新初始化,否则上一次的sum的值依然保留,导致错误。另外,你更改后的程序的输出还要调整,否则会输出很多u是回文数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢大佬,码字辛苦了,我只是想找一种和答案不同的思路,^-^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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