Encontrar o maior palíndromo do produto de um problema de dois números de três dígitos
Assim, no Projeto Euler, oProblema 4 declara o seguinte:
Um número palíndrico lê da mesma maneira nos dois sentidos. O maior palíndromo produzido a partir do produto de dois números de dois dígitos é 9009 = 91 99.
Encontre o maior palíndromo produzido a partir do produto de dois números de 3 dígitos.
Eu tentei o seguinte:
#include <stdio.h>
#include <stdlib.h>
int check(int result)
{
char b[7];
sprintf(b, "%d", result);
if (b[0] == b[5] && b[1] == b[4] && b[2] == b[3])
{
return 1;
}
else
{
return 0;
}
}
int main () {
int i;
int g;
int final;
for (i = 999; i > 99; i--)
{
for (g = 999; g > 99; g--)
{
if (check(g*i) == 1)
{
final = g*i;
goto here;
}
}
}
here:
printf("%d", final);
}
Mas isso não funciona. Em vez da resposta certa, recebo 580085, que acho que é um palíndromo, pelo menos, mas ainda não é a resposta certa.
Deixe-me explicar meu programa a partir deint main
:
int i
eint g
são meus multiplicadores. São esses dois números de três dígitos.int final
é o número que armazenará o maior palíndromo.Começo dois para loops que vão para baixo para obter todas as possibilidades numéricas.Saio do loop usando um goto quando o primeiro palíndromo é atingido (provavelmente não deveria, mas não afeta muito um programa pequeno como esse).O primeiro palíndromo deve ser o maior possível, já que estou fazendo uma contagem regressiva do topo.Deixe-me agora explicar meu cheque:
Primeiro, uma vez que estes são dois números de três dígitos que se multiplicam para determinar o tamanho que um caractere precisaria para manter esse valor. Eu fui a uma calculadora e multipliquei 999 * 999 e acabou sendo 6, então eu preciso adicionar um porque achei de uma das perguntas que eu postei anteriormente quesprintf
coloca um\0
personagem no final.Ok, agora que tenho um caractere e tudo, copieiresult
(quali*g
noint main
) e coloque-ochar b[7]
.Então eu apenas verifiqueib
para ver se ele se igualava codificando cada slot que eu precisava verificar.Então voltei de acordo, 1 para verdadeiro e 2 para falso.Isso me parece perfeitamente lógico, mas não funciona por algum motivo estranho. Alguma dica?