2017-10-03 1 views
-2
#include<iostream> 
using std::cout; using std::endl; using std::cin; 

int main(){ 
long num1; 
cin >> num1; 
long num2; 
cin >> num2; 

long cnt = 0; 
long temp = num1; 
long res = 0; 

while (cnt < num2){ 
res = temp % 10; 
temp = temp/10; 
temp = temp + (res * 100); 
cnt++; 
} 
cout << num1 << endl; // Line 1 
cout << temp << endl; // Line 2 
cout << cnt << endl; // Line 3 
} 

Ich bin verwirrt, wie dieses Programm diese Ausgaben erhält. Gegeben Benutzereingabe von 456 2, Zeile 2 sollte zurück 564 geben. Unten ist meine Arbeit (Problem 4). Nach den Berechnungen bekomme ich 624, warum ist es 564? Das nächste Problem, das ich versuchte, war die Benutzereingabe: 789 3, nachdem ich gesehen hatte, dass meine Antwort in die Tausende ging, nahm ich an, dass ich es falsch machte. Bitte lassen Sie mich wissen, wenn ich etwas falsch mache und wie ich eine Ausgabe von 564 bekommen kann. Vielen Dank.Wie gibt dieses Programm diese Ausgaben aus? C++

enter image description here

+3

Niemals Code als Bilder (Accessibility Probleme) oder auf einer externen Site (die Website kann untergehen), sondern kopieren Sie den Code in die Frage und formatieren Sie es als Code-Block. – tambre

+1

Beachten Sie, dass ganzzahlige Typen Dezimalzahlen abschneiden. Wenn 'temp == 789' dann ergibt 'temp/10' 78, nicht 78.9 –

+2

Ich stimme diese Frage als off-topic zu schließen, da sie Bilder von Code enthält. –

Antwort

3

Um Ihre Frage zu beantworten, ist der Unterschied zwischen Ihren Berechnungen und dem tatsächlichen Ergebnis ist als

cnt 0 folgt:

res = 456% 10 = 6

temp = 456/10 = 45

temp = 45 + (6 * 100) = 645

cnt 1:

res = 645% 10 = 5

temp = 645/10 = 64

temp = 64 + (5 * 100) = 564

Integer Division Zu aus dem Rest, der das Ergebnis des Mod-Operators ist. Sie hatten die Dezimalzahl immer noch dort, die eine 60 aus dem Nichts, wenn sie mit 100 multipliziert wurde

Nur ein gutes Beispiel für Rundungsfragen, wenn von einem großen Faktor gewachsen! (100)

+2

Vielen Dank für Ihre Arbeit, ich bin froh, dass ich weiß, dass ich es richtig gemacht habe, nur muss ich den Rest abschneiden. Viel Anerkennung – Mike

Verwandte Themen