方大侠 发表于 2019-3-9 16:57:48

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

题目要求找出最大的回文数,并且是由两个三位数相乘。
为什么我的输出是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;
}

lilu7688x 发表于 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 每次比对前重置一下
                                 

行客 发表于 2019-3-9 19:11:23

并且是由两个三位数相乘 是什么意思?

方大侠 发表于 2019-3-9 19:47:55

行客 发表于 2019-3-9 19:11
并且是由两个三位数相乘 是什么意思?

没表达好,就是 100-999中间的任意三位数相乘,比如 913 *957 这样 所以用了两个for 100-999

方大侠 发表于 2019-3-9 19:59:43

懂了懂了,多谢老哥 ,原来是没有初始化还有最后忘了比较再放到结果里了

slinky呀 发表于 2020-4-16 16:08:42

小白表示无从下手呜呜呜{:10_266:}

方大侠 发表于 2020-4-19 20:31:10

slinky呀 发表于 2020-4-16 16:08
小白表示无从下手呜呜呜

答案写的很清楚了呀

1138863312 发表于 2020-5-11 21:19:36

那个变量名new应该要换个吧,要不会报错
页: [1]
查看完整版本: 第一阶段考核 找出最大的有由两个 3 位数乘积构成的回文数。