C++, rozdzielanie cyfry na częsci.

0

Witam.
Mam pewien problem. Potrzebuje z 11 cyfrowej liczby, kazdą z cyfr pomnożyć przez inną cyfre, aby później zsumować wynik. Nie mam pojęciac jak sie za to zabrać. Mógłby ktoś pomóc? Na początku probowałem to robić ze stringiem (wiem jak kazdą liste wyciągnąć z osobna ze stringu) ale na szczęscie zrozumiałem jaki to był głupi pomysł.
Pozdrawiam
Stiffler :)

0

Tak mozna to zrobic. Co za problem?

int multiply(int in, int multiplier)
{
int sum(0);
char buffer[64]="";

	sprintf(buffer, "%d", in);
	
	for(size_t i=0; i<strlen(buffer); i++)
	{
		int tmp = atoi(buffer[i]);
		sum += tmp*multiplier;
	}
	
	return sum;

}

Moga byc literowki, ale w sumie tak ma to wygladac. Mozna tez iterowac od konca, ale to troche bardziej zakrecone.

Pozdrawiam serdecznie

0

Ok. Dwie sprawy :P
Po pierwsze nie znam c tylko c++ i ten kod srednio jest dla mnie zrozumialy.
A po drugie, czy dane zapisane w typie char (albo string) nie są jako kod ascii?

0

To,że nie znasz c, nie oznacza, że mozesz oczekiwać od nas jakiego koliwek kodu.

 string n,tmp;
    cin>>n;
    int suma=0;
    for(int i=0;i<n.length();i++)
    {
        tmp=n[i];
        suma+=atoi(tmp.c_str());
    }

@Lex to sie nawet nie skompiluje..

0

Jeszcze tam miało mnożyć. I prościej jest tak:

string strLiczba;
int iWynik = 0, iMnoznik = 5;
cin >> strLiczba;
for(int i = 0; i < strLiczba.length(); i++)
    iWynik += (strLiczba[i] - '0') * iMnoznik;
0

[quote]
To,że nie znasz c, nie oznacza, że mozesz oczekiwać od nas jakiego koliwek kodu.
[/quote]
Nie rozumiem tego zdania. Z tego wynika ze znajomość c jest obowiązkowa, ale jestem pewny ze nie o to Ci chodziło :)

Co do atoi i c.str to chyba jest to czego potrzebuje. z tego co starałem sie zrozumieć wynikło ze dzieki c_str() element tablicy (czyli jedna z tych cyfr) jest przenoszona ze stringa do chara, a atoi zmienia char na int. Dobrze skumałem?

0

Nie do końca, ogólnie c_str zwraca C-String z zmiennej string. atoi zamienia c-string do int, ale jeżeli chcesz lecieć cyfry po kolei to jest to niepotrzebne.
Wystarczy że będziesz wyciągał po kolei cyfry (jako znaki) odejmował od nich znak '0' (wynika to z tego, że kody ASCII cyfr są kolejnymi liczbami) i wtedy dostajesz już wartość cyfry, która się kryje pod konkretnym znakiem.

0

Hmm... troche nie rozumiem tego ascii. Skoro 0 w ascii to tak naprawde 48 (zgodnie z: http://www.webtutoriales.com/images/tutoriales/tabla_ascii.gif) to dlaczego odejmujemy 0 a nie 48?
I jest problem bo z sumy tez musze wyciągnąć ostatnią cyfre. A konkretnie warunek jest taki, ze jezeli ostatnia cyfra tej sumy to 0, to musi cos sie zrobic.

ps. Ucze sie c++, podoba mi sie to, ale jestem samoukiem, zastanawiam sie czy moge zadawać takie pytania na forum i czy to nie bedzie traktowane jako spam. Jestem w klasie informatycznej, mialem juz c++, ale poziom był żenujący, i tak za program pt. "milionerzy" ktory praktycznie skladał sie tylko z pętli if i tablic dostałem 6 i zostałem uniesiony pod niebiosa jako mistrz programowania. Jak na zwykłego nastolatka to powinno być "coś", ale dla mnie było to żenujące, szczególnie że nikt w klasie nie miał pojecia że to było banalnie proste. I tak chce umiec wiecej...

0

Nie nie odejmujesz 0 tylko '0' - czyli właśnie znak, który ma kod ASCII 48. Po prostu tak jest czytelniej niż napisać -48.
Żeby sprawdzić czy ostatnia cyfra jest równa 0 wystarczy sprawdzić czy reszta z dzielenia tej liczby przez 10 jest równa 0 - if((liczba % 10) == 0) ...

0

Ganialne. Dzieki. Spoj teraz zakceptował program :)
Pozdrawiam :)

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