C++ -ban a számjegyek összege algoritmusban valamit nem értek. Lentebb a kód: az osszeg sorig stimmel, de utána?
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?
Ü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...
"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
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 :)
}
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;
}
}
"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";
}
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).
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? :)
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!