Palindromy liczbowe, pomocy!

0

Dostłem zadanie napisania programu otrzymującego wszystkie liczby naturalne nie przekraczające 1M, które są palindromami w systemie dziesiętnym i dwójkowym. Program musi być napisany w języku Turbo Pascal. Każda wskazówka bedzie cenna.
Przeszperałem google, ale nie znalazłem nic satysfakcjonującego, proszę o pomoc. :((

Pozdrawiam

0

A w czym to piszesz, bo zmiana liczby na tekst (łatwiej sprawdzić czy to palindrom) dla Paskala to procedureka Str, dla Delphi IntToStr. Zapis do stringa jako liczbę binarną to już chyba samemu trzeba zrobić (bezwarunkowo bez uzupełniania zerami).

A sprawdzenie tekstu czy to palindrom to już banał.

0

10^6 to niewiele - zrob bruta... rozbijaj na cyfry mod-em, daj osobny warunek dla kazdej ilosci cyfr i jazda - tak chyba najprosciej

0

ja mam taką wersję, najłatwiej mi było to zakodować

uses Crt;

function ReverseString(const s :string) :string;
var
  t       :string;
  ip, len :byte;
begin
  t := s;
  len := Length(s);
  for ip := len downto 1 do t[ip] := s[len-ip+1];
  ReverseString := t;
end;

function IntToStr(const l :LongInt) :string;
var
  s :string;
begin
  Str(l, s);
  IntToStr := s;
end;

function Dec2Bin(l :LongInt) :string;
const
  BinDigit :string = '01';
var
  B1  :Integer;
  B :string;
begin
  B := '';
  repeat
    B1 := l mod 2;
    l := l div 2;
    B := B + BinDigit[B1+1];
  until l < 1;
  Dec2Bin := B;
end;

var
 i   :LongInt;
 dec, bin :string;

begin
  ClrScr;
  for i := 1 to 1000000 do
    begin
      dec := IntToStr(i);
      bin := Dec2Bin(i);
      if (dec = ReverseString(dec)) and
         (bin = ReverseString(bin)) then
         WriteLn('Liczba ', dec, ' [', bin, '] jest palindromem');
    end;
  ReadLn;
end.
0

Wielkie dzięki za pomoc, pozdrawiam [browar]

0

Rozwiązanie wystarczające, ale pogrążyłbym to.
Zamienianie na tekst, jest może pracochłonne, ale zapisuje się zwięźle, więc niech będzie.
Ale np. czy liczba parzysta może być binarnie palindromem? Podobnie liczba podzielna przez dziesięć (na szczęście 10 jest parzyste)?
Czy można by jeszcze jakoś lepiej generować potencjalnych kandydatów niż prostym FOR...?

0

Na moim PIII 1GHz, program Adama {$r-} do miliona dotarł w 5 sekund.
Łatwo przyśpieszyć go dwukrotnie.
Lecz kiedy chciałem sprawdzić liczby do miliarda, zajęło to (wersji 2x) 70 minut.
Znalazłem 31, albo 30 takich liczb, zależnie czy zero uznamy za liczbę naturalną czy nie.
Pobawiłem się troszkę bitami i do 4'294'967'295 dotarłem w mniej niż 1/10 sekundy.
Program jest nawet krótszy.
4000 razy większy zakres w czasie 80'000 razy krótszym (300 mln razy szybciej :-).

0
Xitami napisał(a)

Rozwiązanie wystarczające, ale pogrążyłbym to.

Zdaję sobie sprawę, że to rozwiązanie nie ma nic wspólnego z optymalizacją, ale nie chciałem aby wykładowca pogrążył wampira. ;-)

0

Ojej, napisało mi się "pogrążył" co mogło by sugerować coś co nie było moją intencją.
Miało być "podrążył", czyli pobawił się jeszcze :)

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