Kezdőoldal » Számítástechnika » Programozás » C++ -ban a számjegyek összege...

C++ -ban a számjegyek összege algoritmusban valamit nem értek. Lentebb a kód: az osszeg sorig stimmel, de utána?

Figyelt kérdés

int n;

int osszeg=0;

cout<<"adj egy szamot:";

cin>>n;

while (n!=0){

osszeg=osszeg+n%10;

n=n/10;

A maradék osztásnál az összeg lesz a maradék, de az utolsó sort nem értem. Pl.1235 a bevitt szó: utolsó előtti sorban 5 lesz, de az utolsó, az 1235/10=123,5. Szóval valaki?


2017. jan. 14. 17:58
 1/9 anonim ***** válasza:
most mi van?
2017. jan. 14. 18:09
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

Ühm, nem tudom érthetőbben elmagyarázni. :-)

Szóval nem tudom, hogy hogy jön ki, ebben az esetben 15. De kijön, az tuti... Hagyjuk...

2017. jan. 14. 18:13
 3/9 anonim ***** válasza:

"de az utolsó, az 1235/10=123,5"

Mivel az osztás eredményét az "n" egész változónak (lásd az első sorban: int n;) adod át, ezért az "levágja" a tizedesjegyeket, így lesz

1235 / 10 = 123

2017. jan. 14. 18:17
Hasznos számodra ez a válasz?
 4/9 HaBB_00 ***** válasza:

Figyelj, ha ez egy számjegyek összeadására alkalmas programot szeretnél csinálni, nem tudom milyen módszer ez de itt egy működő számjegy összeadó program:

#include <iostream>

using namespace std; /*ezt különben nem ajánlom, ha egy kicsit is jártas vagy az objektum orientált programozásban, akkor inkább minden input output parancs elé odabiggyeszthetnéd az std::-t*/


int main(){

int n;

int osszeg;

cout <<"Adj meg egy szamot: ";

cin >> n;

while(n != 0) {

if(n <= 9){

osszeg += n % 10;

n -= (n % 10)/10;

}

else

osszeg += n;

n = 0;

}

ez egy megoldás, gondolom érted mi a logikája :)

}

2017. jan. 14. 19:28
Hasznos számodra ez a válasz?
 5/9 HaBB_00 ***** válasza:

hopsz itt a jó elvétettem valamit

int main(){

int n;

int osszeg;

cout <<"Adj meg egy szamot: ";

cin >> n;

while(n != 0) {

if(n <= 9){

osszeg += n % 10;

n -= (n % 10)/10;

}

else{

osszeg += n;

n = 0;

}

}

2017. jan. 14. 19:29
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:

"using namespace std; /*ezt különben nem ajánlom, ha egy kicsit is jártas vagy az objektum orientált programozásban, akkor inkább minden input output parancs elé odabiggyeszthetnéd az std::-t*/"


using std::cout;

using std::cin;


int main() {

cout << "123\n";

}

2017. jan. 14. 21:06
Hasznos számodra ez a válasz?
 7/9 Hominida ***** válasza:
2017. jan. 14. 21:13
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:

Mivel nem nagyon lett elmagyarázva a valódi kérdésre a válasz:


Az 1235/10 eredménye nem 123,5 lesz, hanem 123. C++ nyelven (és a legtöbb másik nyelven is) ha az osztás operátor ('/') két oldalán egész szám van, akkor egészosztást hajt végre a program, vagyis a hányadosnak csak az egészrésze marad meg. Ez NEM kerekítés, hanem a törtrész elhagyása, szóval pl a 19/10 eredménye ugyanúgy 1 lesz, nem lesz 2-re felkerekítve, csak azért, mert 1,9 közelebb lenne a 2-höz. A hányados akkor fog törtrészt is tartalmazni, ha az osztásban szerepel lebegőpontos szám (pl float/double típus).

2017. jan. 14. 21:40
Hasznos számodra ez a válasz?
 9/9 HaBB_00 ***** válasza:

vagyis:

float osszeg=0.0;

így:

1235 --> 5-megy az összegbe, n/=10 --> 123,5

123,5 --> 3 megy az összegbe(mivel ugye az összeg változó sima int, ezért nem tartja meg a tizedesjegyét, tehát szimplán 3-at ad hozzá), n/=10 --> 12,35

12,35 --> 2 megy az összegbe, n/=10 --> 1,235

1,235 --> 1 megy az összegbe, n/=10 --> 0,1235

ajánlom továbbá hogy a whileban ne n!=0 legyen, hanem n>1 így ha kisebb lesz, kilép.

szerintem így meg lett magyarázva. még kérdés? :)

2017. febr. 26. 21:55
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!