求两个三位数相乘的最大回文数
#include<stdio.h>main(){
long int i,j,k,l,result;
l = 0;
result = 0;
for(i = 999;i > 100;i --){
for(j = 999;j > 100;j --){
k = i * j;
while (k){
l = l * 10 + k % 10;
k = k / 10;
}
k = i * j;
if(k == l){
result = l;
goto A;
}
}
}
A: printf("%ld",result);
return 0;
}
请问各位鱼友,这样求最大回文数有什么问题,为什么最后输出是0 不会C,感觉 l = 0;应该放在k = i * j;之后 冬雪雪冬 发表于 2019-12-8 22:26
不会C,感觉 l = 0;应该放在k = i * j;之后
感觉这样没啥区别啊{:5_100:} Mr.liuqingjun 发表于 2019-12-8 22:54
感觉这样没啥区别啊
测试第一个数时,l的初始值是0,测试第二个数时,l的初始值变成了第一个数的回文数。 本帖最后由 bin554385863 于 2019-12-9 13:26 编辑
#include <stdio.h>
int func()
{
int m = 0, n = 0;
for (size_t i = 999; i > 100; i--)
{
for (size_t j = 999; j > i - 100; j--)
{
n = i * j;
m = 0;
while (n != 0)
{
int t = n % 10;
n /= 10;
m = m * 10 + t;
}
if (m == i * j)
{
n = 1;
printf("%d * %d = ", i, j);
break;
}
else
{
continue;
}
}
if (n)
{
break;
}
else
{
continue;
}
}
return m;
}
int main(int argc, char const *argv[])
{
printf("%d", func());
return 0;
}
=========================================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。
E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-fvcdl0sr.kvl --stdout=Microsoft-MIEngine-Out-0rubgwee.c5k --stderr=Microsoft-MIEngine-Error-jqdh1vor.pxr --pid=Microsoft-MIEngine-Pid-egw5v1ld.wvi --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
993 * 913 = 906609
E:\Users\admin\Documents\VScode\Code> #include <stdio.h>
main()
{
int a , b , d , i , j , m , r ;
for(a = 0 , b = 0 , i = 999 ; i > 99 ; i --) for(j = 999 ; j > 99 ; j --) {
for(d = 1 ; d * 10 < i * j ; d *= 10) ;
for(r = 1 , m = i * j ; d > 1 && r ; m = (m % d) / 10 , d /= 100) if(m / d != m % 10) r = 0 ;
if(r && i * j > a * b) a = i , b = j ;
}
printf("%d * %d = %d\n" , a , b , a * b) ;
}
编译、运行实况:
C:\Bin>g++ -o x x.c
C:\Bin>x
993 * 913 = 906609
C:\Bin>
所以,答案就是,这个最大回文数是 993 × 913 = 906609 #include <stdio.h>
int reverse(int n){
int t = 0;
while(n){
t = t*10 + n%10;
n/=10;
}
return t;
}
int main(){
int i, j, flag = 0;
for(i = 997799; i>=10001 && flag == 0; i--){
if(reverse(i) == i){
for(j = 999; j>=100 && i/j<999; j--)
if(i%j ==0){
printf("%d * %d = %d\n", j, i/j, i);
flag = 1;
break;
}
}
}
return 0;
}
结果:
993 * 913 = 906609
页:
[1]