Problem z podzieleniem liczby na pojedyncze cyfry


(Lchrom) #1

Mam do napisania program w Javie, który odczytuje 1000 różnych liczb zapisanych w pliku tekstowym, i każdą z nich dzieli na pojedyncze cyfry (np liczba 2345 dzieli na 2,3,4,5) i następnie je sumuje. Tu pojawia się problem, nie wiem w jaki sposób podzielić integera na pojedyncze cyfry i najlepiej zapisać je do tablicy i tam zsumować?


(Fiołek) #2

Nie potrzeba do tego używać tablicy. Co więcej, nie potrzeba do tego konwertować ciągów znaków na liczby. Wystarczy, że przeiterujesz po wszystkich znakach i zsumujesz wartości tam zapisanych cyfr(znak - '0'). Przykład: http://ideone.com/IIFyeF

 

Jeśli koniecznie musisz parsować ciąg znaków na liczbę, to wystarczy, że wykonasz taki prosty algorytm, by zsumować jej cyfry:

 

 

Przykład: http://ideone.com/x91qNW .

 

W obu przypadkach zakładam, że liczby są dodatnie. Jeśli nie - jeden if sprawdzający znak więcej będzie potrzebny.


(StawikPiast) #3

Po prostu potraktuj tresc pliku jako jeden wielki string i zliczaj cyfry wybierając substringa po kolei, Zakladam ze liczby sa jakos rozdzielone wiec taki separator musisz pomijać w obliczeniach.


(Marcin Obala) #4

Nie wiem czy Java ma jakieś dobrodziejstwo podobne do Linq i extension methods ale w c# wyglądałoby to np. tak:

string wczytanaLinijka = reader.ReadLine();
int suma = wczytanaLinijka.ToCharArray().Select(znak =>(int)(znak) - 48).Sum();

Jednak to co mi jako pierwsze wpadło do głowy to to samo co napisał fiołek.