2015-07-01 3 views
-1

Может ли кто-нибудь объяснить мне, почему вывод для программы ниже, если вы вводите значения: 5, 222, 2043, 29, 2, 20035 - 22222? Я пытаюсь решить эту проблему на бумаге, и я просто не могу добраться до этого результата.Обозначение кода для цикла while в пределах цикла

#include <iostream> 
using namespace std; 

int n=0; 
int x=0; 
int s=0; 
int i=1; 


int main() { 
    cin >> n; 
    for(i=1; i<=n; i++) { 
     cin >> x; 
     int nr=1; 
     while(x>9) { 
      nr=nr*10; 
      x=x/10; 
     } 
     s=s+x*nr; 
    } 
    cout << s; 
    return 0; 
} 
+0

Ну, учитывая 'x', в чем вы заканчиваете для' x * nr'? – Barry

+2

Пройти через отладчик? –

+1

Вы знаете, что можете выполнить код с помощью своего отладчика и посмотреть, что делают каждый шаг. Это очень полезный инструмент. – NathanOliver

ответ

1

Ваш цикл while делится x на 10 каждый раз. И поскольку вы имеете дело с целыми числами, это просто сдвигает десятичное число один вправо: 7234 -> 723. Он делает это до тех пор, пока он меньше 10, или, другими словами, есть одна (первая) цифра слева: 7. Затем она снова умножается на 10^(раз делится на 10): 7000.
Это означает код whitin for for-loop делает все, кроме первых цифр, равными нулю в каждом x. поэтому в конце вы получите: 200 + 2000 + 20 + 2 + 20000

+0

Спасибо вам большое! – Flav

Смежные вопросы