Palindromy liczbowe, pomocy!

Odpowiedz Nowy wątek
2007-03-22 13:01
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

Pozostało 580 znaków

2007-03-22 16:53
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ł.


Nie łam się, i tak ktoś zrobił to za ciebie
<hr style="color: #B10C0C; width: 10%; margin-left: 0" />
LUDZIE goto NIE UŻYWA SIĘ WSZĘDZIE GDZIE MOŻNA, TYLKO TAM GDZIE TRZEBA

Pozostało 580 znaków

2007-03-22 16:56
0

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


Pozostało 580 znaków

2007-03-22 21:00
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.

<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>

Pozostało 580 znaków

2007-03-22 22:54
0

Wielkie dzięki za pomoc, pozdrawiam [browar]

Pozostało 580 znaków

2007-03-22 23:54
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...?

Pozostało 580 znaków

2007-03-23 12:37
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 :-).

Pozostało 580 znaków

2007-03-23 16:27
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. ;-)


<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>

Pozostało 580 znaków

2007-03-24 08:56
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 :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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