第一阶段考核 找出最大的有由两个 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 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
并且是由两个三位数相乘 是什么意思?
没表达好,就是 100-999中间的任意三位数相乘,比如 913 *957 这样 所以用了两个for 100-999 懂了懂了,多谢老哥 ,原来是没有初始化还有最后忘了比较再放到结果里了 小白表示无从下手呜呜呜{:10_266:} slinky呀 发表于 2020-4-16 16:08
小白表示无从下手呜呜呜
答案写的很清楚了呀 那个变量名new应该要换个吧,要不会报错
页:
[1]