Suma ciągu liczb

0

Cześć,
w ramach nauki Javy wymyśliłem sobie zadanie, że policzę sumę ciągu liczb. Jednak pomimo wysiłku i wielu prób znalezienia podpowiedzi w google i na tym forum nie udało mi się, dlatego postanowiłem założyć ten temat z nadzieją, że pomożesz mi znaleźć właściwe rozwiązanie.

public class Matma
{
	public static void main(String[] args)
	{
		
		int x = 13479;
				
		String pokazIleMamZnakow = Integer.toString(x);
		System.out.println(pokazIleMamZnakow.length());
		System.out.println(pokazIleMamZnakow.charAt(4));
		
		int[] tab = new int[pokazIleMamZnakow.length()];

		int suma = Integer.parseInt(pokazIleMamZnakow);
		for(int i=0; i < pokazIleMamZnakow.length(); i++)
		{
			suma += pokazIleMamZnakow.charAt(i);
		}
		System.out.println(suma);
	}
}

Suma wychodzi mi 13743. Podejrzewam, że problem tkwi w toString, ale nie wiem jak z powrotem skonwertować to do int'a.

0

Czym jest ta tajemnicza suma ciągu liczb? Chcesz po prostu sumować 1+3+4+7+9? Czyli chcesz policzyć sumę cyfr liczby x?

0

Faktycznie nie jasno się wyraziłem :). Oczywiście chodzi mi o zsumowanie x czyli 1+3+4+7+9.

0

Opis Twoich działań:

int x = 13479;
 
String pokazIleMamZnakow = Integer.toString(x); // konwersujesz x do stringa...?
System.out.println(pokazIleMamZnakow.length());
System.out.println(pokazIleMamZnakow.charAt(4));
 
int[] tab = new int[pokazIleMamZnakow.length()]; // tworzysz tablicę której później nie używasz. Wywalić.
 
int suma = Integer.parseInt(pokazIleMamZnakow); // parsujesz (!) pokazIleMamZnakow z powrotem do inta.
for(int i=0; i < pokazIleMamZnakow.length(); i++)
{
            suma += pokazIleMamZnakow.charAt(i); // największe WTF na koniec - dodajesz wartości ASCII każdej litery do sumy??
}
System.out.println(suma);
0

O, napisałeś o co Ci chodzi...

int x = 13479;
int suma = 0;
while(x > 0)
{
    suma += x % 10;
    x /= 10;
}
0

@Tezcatlipoca dzięki za pomoc.

Mam jeszcze kilka pytań odnośnie tego przykładu.

  1. Czy da się wyświetlić ilość liczb X bez konwersowania do Stringa?
  2. Czy ta linia int suma = Integer.parseInt(pokazIleMamZnakow); zmieniła na inta?
  3. Dlaczego while a nie for i dlaczego taki warunek?
while(x > 0)
{
    suma += x % 10;
    x /= 10;
}

Być może są to dla Was głupie pytania, ale ja się dopiero uczę i nie wszystko jest dla mnie oczywiste (co widać po przykładnie, który wkleiłem w pierwszym poście :))

0
  1. Nie rozumiem pytania.
  2. Tak
  3. Przeanalizuj jak to działa. Na starcie x = 13479, x % 10 to reszta z dzielenia x przez 10 (tzn. 9), dodajesz 9 do sumy (suma +=x % 10;) i zastępujesz x wynikiem dzielenia x przez 10, w Javie dzielenie liczb całkowitych daje wynik całkowity, zatem x ma teraz wartość 13479/10 = 1347, itd.
0

W pytaniu nr 1 chodzi mi o to, żeby wyświetlić długość liczby x zrobiłem coś takiego:

int x = 13479;
   String pokazIleMamZnakow = Integer.toString(x);
   System.out.println(pokazIleMamZnakow.length());

Zastanawiam się czy bez konwersowania konwertowania można wyświetlić dlugość x?

0

Do kodu podanego przez Tezcatlipoca wystarczy dodać licznik cyfr, który w pętli będziesz zwiększać o jeden.

0

Można

dl = 1+(int)Math.floor(Math.log10(x));
0

Z dedykacją dla @winerfresh 'a

int ileCyfr(int n)
{
    if(n == 0)
    {
        return 1;
    }
    else
    {
        return 1 + (int)Math.floor(Math.log10(Math.abs(n)));
    }
}

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