2013-12-03 2 views
1

У меня есть небольшая проблема. Мой код таков:C# цикл, использующий while. Переменная отображается только один раз

int c = 0; 
int i = 0; 
int a = 28; 
while (i < a) { 
    i++; 
    if (i % a == 0) { 
     c += i; 
     Console.WriteLine(i.ToString()); 
    } 
} 

Почему строка i отображается только один раз, после окончания времени? Он должен отображаться раз.

Ваша помощь будет оценена!

+4

Шаг через это с помощью отладчика. – usr

+0

Вы играете с [совершенным номером] (http://en.wikipedia.org/wiki/Perfect_number) 28. Вы пытаетесь суммировать все числа 'i', которые делят 28, но поскольку вы помещаете операнды в неправильный порядок, вы суммируете все числа 'i', что 28 делит. –

ответ

5

Вашего if условие противоположно должно быть:

if (a % i == 0) 

В настоящее время вы пытаетесь сделать остаточное деление с i % a и она будет отвечать только состоянию, когда i достигает 28, так что вы получите выход один раз.

+0

Спасибо, ты прав;) Большое спасибо :) – TivBroc

+0

@TivBroc, добро пожаловать – Habib

0

% предназначено для разделения модулей, которое в основном делит на число и возвращает остаток. Когда вы достигли 28-го цикла, он делит его на 28, а полученный остаток равен 0. Это происходит только один раз «когда ваш цикл достигает 28».

+0

Спасибо :) Проблема решена – TivBroc

0

Это поможет, если вы сообщите нам, что было распечатано. Я думаю, это потому, что 28

i % a 

возвращает напоминание о

i/a 

(я деленная на а), и только 0, когда я равен а, то есть 28.

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