project euler, problem 4 (problem!)

0

Witam, to moj pierwszy post wiec jesli popelniam wraz z tym postem coś karygodnego to prosze o informacje (i tak bym ją pewnie dostal).
Rozwiazuje zadania z strony project euler (http://projecteuler.net/index.php?section=about ) zadanie 4 o tresci:

"A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99.

Find the largest palindrome made from the product of two 3-digit numbers."

dopiero zaczynam nauke c++ wiec kod wyglada jak wyglada, ale moj problem polega na tym, ze nie spelnia on swojej funkcji. sądzę, że problem jest z linijkami

for(int i=1;i<=999;i++)
		{
			for(int j=1;j<=999;j++)
			{
					wynik = i*j;
 

bo gdy ustawie odgornie 'wynik' jako np. 9009 czy 1234 program dziala i odpowiednio rozroznia liczby.
oto pełny kod:

 
#include <iostream>
#include <conio.h>
#include <cmath>

using namespace std;


int wynik,dupa,odwr;



int ILEdlugosc(int a)
{
int dlugosc=0;
	while (a >=1)
	{
	a=a/10;
	dlugosc++;
}
	return dlugosc;
}


int cyfraNaPozycji(int a,int pozycja)
{  
	a = a / pow(10.0f,pozycja);
		a = a %10;
	return a;
}

void main()
{
		for(int i=1;i<=999;i++)
		{
			for(int j=1;j<=999;j++)
			{
					wynik = i*j;
					int dlugosc = ILEdlugosc(wynik);
					int licznik = dlugosc-1;
					for (int k=0; k < dlugosc;k++,licznik--)
					{
						
						  odwr = odwr + cyfraNaPozycji(wynik,k) * pow(10.0f,licznik);
						 if (wynik == odwr)
						{
						 cout << wynik << "\n";
						}
					}
					
			}
			

		} 
		
getch();
}

za pomoc dziekuję!

0
int palindrom(int n){
        int k=0, m=n;
        while(m){
                k=k*10 + m%10;
                m/=10;
        }
        return k==n;
}
 
int main(){
        int i,j;
        for(i=100;i<1000;i++)
                for(j=i; j<1000; j++)
                        if(palindrom(i*j))
                                printf("%4d %4d %7d\n",i,j,i*j);
}
0

dziekuję za odpowiedz, jednak nie wiem jak odnieść ten kod do moich wypocin.

1

Macie znaleźć największą taką liczbę, więc po co szukacie od początku? Nie lepiej zacząć od końca?

0

A może na odwrót? Iterować po wyniku, ale z a to w sprytny sposób:

for(int i=9; i>=0; --i) // iterowanie po pierwszej/ostatniej cyfrze
    for(int j=9; j>=0; --j) 
         for(k=9; k>=0; --k) {// iterowanie po środkowych cyfrach
         int number = i*100001 + j*10010 + k*1100;
         for (int a=999; number<=a*a; --a)
               if (number%a==0)
                      return number;
    }
0

ok, temat do zamknięcia.
problem był w złym miejscu deklaracji int wynik, powinien być po pętlach, nie w globalnej.
poza tym działa aż miło.

0
kicjow napisał(a)

[...]działa aż miło.
Działa bo zakresy maleńkie
Rozwiązanie Marka działa aż miło, nie Twoje czy moje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1