求两个三位整数乘积构成的最大回文数
本帖最后由 超越大神 于 2020-11-17 14:52 编辑#include<stdio.h>
int main(void)
{
int i,j,k,flag=0,s;
for(i=998001;i>=10000;i--)
{
s=i;
j=0;
while(s>0)
{
j=j*10+s%10;
s=s/10;
}
if(j==s)//是回文数
for(k=100;k<=999;k++)
{
if((j%k==0)&&(j/k>=100)&&(j/k<1000))
{
flag=1;break;//回文数是否两个三位整数的乘积
}
}
if(flag) break;
}
printf("%d,%d",i,k);
return 0;
}
感觉程序没错啊,但是不但回文数不对,k的值直接变为0 yijiejue 你这个题目有问题,从 10000 ~ 998001 ,回文数有很多,但没有一个回文数是两个三位数的乘积 风过无痕1989 发表于 2020-11-17 15:16
你这个题目有问题,从 10000 ~ 998001 ,回文数有很多,但没有一个回文数是两个三位数的乘积
咋没有啊 超越大神 发表于 2020-11-17 18:26
咋没有啊
我程序有问题,有一行if哪一行写错了 超越大神 发表于 2020-11-17 18:28
我程序有问题,有一行if哪一行写错了
你举几个例子出来,哪两个三位数的相乘是一个回文数
下午的程序我已经删除掉了,你举出例子来,我再重写程序来验证 风过无痕1989 发表于 2020-11-17 19:18
你举几个例子出来,哪两个三位数的相乘是一个回文数
下午的程序我已经删除掉了,你举出例子来,我再重 ...
#include<stdio.h>
int main(void)
{
int i,j,k,flag=0,s;
for(i=998001;i>=10000;i--)
{
s=i;
j=0;
while(s>0)
{
j=j*10+s%10;
s=s/10;
}
if(j==i)//是回文数这一行本来写错了改过来了
for(k=100;k<=999;k++)
{
if((j%k==0)&&(j/k>=100)&&(j/k<1000))
{
flag=1;break;//回文数是否两个三位整数的乘积
}
}
if(flag) break;
}
printf("%d,%d",i,k);
return 0;
} 超越大神 发表于 2020-11-17 19:45
上面的结论错误,我又重新写了一个
#include<stdio.h>
int main()
{
int i, j, k,m = 0,sw, wa, qi, ba, sh, ge;
for (i = 998001;i >= 10000;i--)
{
sw = i / 100000;
wa = (i - sw * 100000) / 10000;
qi = (i - sw * 100000 - wa * 10000) / 1000;
ba = (i - sw * 100000 - wa * 10000 - qi * 1000) / 100;
sh = (i - sw * 100000 - wa * 10000 - qi * 1000 - ba * 100) / 10;
ge = i % 10;
if (sw == ge && wa == sh && qi == ba)
{
/* printf("%d 是回文数\n", i); */
for (j = 999;j >= 100;j--)
{
for (k = 999;k >= 100;k--)
{
if (i == j * k && k != m) // 设置变量 m 的目的过滤重复(比如:1 x 2 与 2 x 1)
{
m = j;
printf("%d 是符合要求的回文数: %d = %d * %d\n", i, i, j, k);
break;
}
}
}
}
// 修改下面 else 语句的条件可以改变仅仅输出最大的一个,还是全部符合要求的回文数;
// 如条件改为 sw == 0,则仅输出 6 位数的回文数
else if(m != 0)
break;
}
}
页:
[1]