鱼C论坛

 找回密码
 立即注册
查看: 1044|回复: 4

[已解决]C第一阶段考核回文数问题

[复制链接]
发表于 2021-1-13 17:27:32 | 显示全部楼层 |阅读模式

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

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

x
兄弟姐妹们,有人能帮我看一下,为什么我写的这段代码出来的结果是0呢???

原题目如下图:

                               
登录/注册后可看大图


我写的代码如下:
#include<stdio.h>

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

    for(i = 10; i < 100; i++)
    {
        for(j = 10; j <= i; j++)
        {
            num = i * j;
            temp = num;

            while(temp)//求该数的倒置数
            {
                num0 = num0 * 10 + temp % 10;
                temp /= 10;
            }

            if(num0 == num)//判断是否回文数
            {
                if(max < num)
                {
                    max = num;
                }
            }
        }
    }

    printf("最大的由三位数乘积构成的回文数是:%d\n", max);

    return 0;
}

最佳答案
2021-1-13 21:43:23
本帖最后由 jackz007 于 2021-1-13 21:47 编辑
#include <stdio.h>

int foo(int n , int * a , int * b)
{
        int d , e , i , j , r                                    ;
        for(r = d = 0 , e = n ; e ; e /= 10) d = d * 10 + e % 10 ;
        if(d == n) {
                for(i = 100 ; i * i < n + 1 ; i ++) {
                        if(! (n % i)) {
                                j = n / i                        ;
                                if(i > 99 && i < 1000 && j > 99 && j < 1000) {
                                        * a = i                  ;
                                        * b = j                  ;
                                        r = 1                    ;
                                        break                    ;
                                }
                        }
                }
        }
        return r                                                 ;
}

int main(void)
{
        int i , j , k                                            ;
        for(k = 999 * 999 ; k > 99 * 99 ; k --) {
                if(foo(k , & i , & j)) {
                        printf("%d = %d * %d\n" , k , i , j)     ;
                        break                                    ;
                }
        }
}
        编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
906609 = 913 * 993

D:\00.Excise\C>
        你算出来和这个答案一样吗? 可以肯定地说,906609 一定是所有两个 3 位数乘积所得回文数中最大的那一个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-13 17:29:02 | 显示全部楼层
原题目:
3. 找出最大的有由两个三位数乘积构成的回文数。
一个回文数指的是从左向右和从右向左读都一样的数字。最大的由两个两位数乘积构成的回文数是 9009 = 91 * 99。
由于这道题比较难,放点提示给大家吧
提示:判断一个数是否为回文数,你可以先求该数的倒置数(比如 123 的倒置数是 321),如果倒置数等于本身,那么就说明这是一个回文数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-13 20:11:02 | 显示全部楼层
解决了!
循环回收没处理好。。。num0循环后没有回收。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-13 21:43:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-13 21:47 编辑
#include <stdio.h>

int foo(int n , int * a , int * b)
{
        int d , e , i , j , r                                    ;
        for(r = d = 0 , e = n ; e ; e /= 10) d = d * 10 + e % 10 ;
        if(d == n) {
                for(i = 100 ; i * i < n + 1 ; i ++) {
                        if(! (n % i)) {
                                j = n / i                        ;
                                if(i > 99 && i < 1000 && j > 99 && j < 1000) {
                                        * a = i                  ;
                                        * b = j                  ;
                                        r = 1                    ;
                                        break                    ;
                                }
                        }
                }
        }
        return r                                                 ;
}

int main(void)
{
        int i , j , k                                            ;
        for(k = 999 * 999 ; k > 99 * 99 ; k --) {
                if(foo(k , & i , & j)) {
                        printf("%d = %d * %d\n" , k , i , j)     ;
                        break                                    ;
                }
        }
}
        编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
906609 = 913 * 993

D:\00.Excise\C>
        你算出来和这个答案一样吗? 可以肯定地说,906609 一定是所有两个 3 位数乘积所得回文数中最大的那一个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-14 13:39:17 | 显示全部楼层
jackz007 发表于 2021-1-13 21:43
编译、运行实况

        你算出来和这个答案一样吗? 可以肯定地说,906609 一定是所有两个 3 ...

感谢!算出来答案跟你的一样!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 03:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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