Pętla for wykonuje się nie tę ilość razy co powinna. Gdzie jest błąd?

0

Oto mój kod:

#include <iostream>

using namespace std;

int how_many_digits(int n)
{
	int i = 0;
	while (n > 0)
	{
		n /= 10;
		i++;
	}
	return i;
}

int main()
{
	int numberOfTests, number, sumOfDigits = 0;
	int *digits;

	cin >> numberOfTests;
	for (int i = 1; i <= numberOfTests; i++)
	{
		cin >> number;
		cout << how_many_digits(number) << endl;
		digits = new int[how_many_digits(number)];
		for (int j = 0; j < how_many_digits(number); j++)
		{
			cout << j << endl;
			digits[j] = number % 10;
			number /= 10;
			sumOfDigits += digits[j];
		}
		cout << sumOfDigits << endl;
		delete[] digits;
	}

    return 0;
}

Dla liczby 123123123 how_many_digits(number) wynosi 9, a pętla z "j" wykonuje się tylko 5 razy. Według mnie pętla powinna się wykonać 9 razy.

1

j < how_many_digits(number) wykona się przed każdym odpaleniem kodu w pętli. number zmienia wartość w pętli

1

Btw, liczbę cyfr w danej liczbie da się policzyć bez wykorzystania pętli, ze stałą złożonością - pomyśl jak ;-)

1

Chyba trochę przekombinowałem ten program. :D
Poniżej ulepszona wersja:

#include <iostream>

using namespace std;

int main()
{
	int number_of_tests;

	cin >> number_of_tests;
	for (int i = 1; i <= number_of_tests; i++)
	{
		int sum_of_digits = 0;
		int number;

		cin >> number;
		while (number != 0)
		{
			sum_of_digits += (number % 10);
			number /= 10;
		}
		cout << sum_of_digits << endl;
	}

    return 0;
}
Patryk27 napisał(a):

Btw, liczbę cyfr w danej liczbie da się policzyć bez wykorzystania pętli, ze stałą złożonością - pomyśl jak ;-)

Trochę myślałem, ale na nic nie wpadłem. :/
Poszukałem w necie i napotkałem coś takiego: howManyDigits = (int)log10(number) + 1; . O to chodziło? Bardzo ładny sposób. :D

Mam jeszcze inny problem z tym kodem. To zadanie jest ze SPOJ.com i w poleceniu jest by program liczył sumę cyfr dla liczb od 1 do 10^50. Nawet unsigned long long int nie ma takiego zasięgu. A jak nie skorzystam z inta to nie mogę użyć modulo. Jakieś pomysły?

2

Jakieś pomysły?

Nikt Ci nie każe wczytywać liczby :-) std::string da radę.

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