鱼C论坛

 找回密码
 立即注册
查看: 1242|回复: 7

[已解决]第一阶段考核 找出最大的有由两个 3 位数乘积构成的回文数。

[复制链接]
发表于 2019-3-9 16:57:48 | 显示全部楼层 |阅读模式

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

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

x
题目要求找出最大的回文数,并且是由两个三位数相乘。
为什么我的输出是0呀。最好是指出我代码里的问题,新写一段代码我还是不知道原来为什么错,谢谢各位了


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

int main(){
        int i,j,g,temp;
        long num,new=0,result;

        for(i=100;i<1000;i++){
                for(j=100;j<1000;j++){
                        num= i*j;               //所有3位数的乘积 

                        temp =num;
                        while(temp){     
                                g=temp%10;      
                                new =10*new+g;  
                                temp=temp/10;   //得到原来数的倒置数
                        }
                        if(new==num){          //判断两个数是否相等
                                result=new;
                        }
                }
        }
        printf("三位数乘得的最大回文数:%ld\n",result);
return 0;
}


判断一个数是否为回文数,你可以先求该数的倒置数(比如 123 的倒置数是 321),如果倒置数等于本身,那么就说明这是一个回文数。
一个普通的十进制数,比如 123 可以看成是 1 * 10^2 + 2 * 10^1 + 3 * 10^0,那么对应的倒置数就应该是 3 * 10^2 + 2 * 10^1 + 1 * 10^0。
好了,你开始上道了……

那如何求出这个十百位上的 1、2、3 呢?

没错,通过与 10 相除和求余可以得到。
比如:123 % 10 = 3, 123 / 10 = 12 -> 12 % 10 = 2, 12 / 10 = 1 -> 1 % 10 = 1, 1 / 10 = 0

写代码就是:
i = num;
j = 0;
while (i)
{
        j = j * 10 + i % 10;
        i = i / 10;
}
最佳答案
2019-3-9 18:49:31
本帖最后由 lilu7688x 于 2019-3-9 19:17 编辑
new = 0;
                        while(temp)
                                                {  
                            g = temp % 10;      
                            new = 10 * new + g;  
                            temp = temp / 10;   //得到原来数的倒置数
                        }
                        if(new == num && new > result )
                                                {          //判断两个数是否相等
                            result = new;
                        }
new=0 每次比对前重置一下
                                 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-9 18:49:31 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +5 鱼币

本帖最后由 lilu7688x 于 2019-3-9 19:17 编辑
new = 0;
                        while(temp)
                                                {  
                            g = temp % 10;      
                            new = 10 * new + g;  
                            temp = temp / 10;   //得到原来数的倒置数
                        }
                        if(new == num && new > result )
                                                {          //判断两个数是否相等
                            result = new;
                        }
new=0 每次比对前重置一下
                                 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-9 19:11:23 | 显示全部楼层

回帖奖励 +5 鱼币

并且是由两个三位数相乘 是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-9 19:47:55 | 显示全部楼层
行客 发表于 2019-3-9 19:11
并且是由两个三位数相乘 是什么意思?

没表达好,就是 100-999中间的任意三位数相乘,比如 913 *957 这样 所以用了两个for 100-999
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-9 19:59:43 | 显示全部楼层
懂了懂了,多谢老哥 ,原来是没有初始化还有最后忘了比较再放到结果里了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 16:08:42 | 显示全部楼层
小白表示无从下手呜呜呜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-19 20:31:10 | 显示全部楼层
slinky呀 发表于 2020-4-16 16:08
小白表示无从下手呜呜呜

答案写的很清楚了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 21:19:36 | 显示全部楼层
那个变量名new应该要换个吧,要不会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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