马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
本帖最后由 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 每次比对前重置一下
|