2013-02-27 3 views
1

Я пишу программу для класса C++, которая вычисляет числа Армстронга. Программа работает отлично, за исключением каждой выходная строка должна читаться как:Счетчик не дает ожидаемого результата

Armstrong number 1: xxx 
Armstrong number 2: xxx 
Armstrong number 3: xxx 
Armstrong number 4: xxx, etc... 

Вычисление правильно, но счетчик, чтобы дать порядковый номер «Armstrong номер 1», 2, 3, и т.д. только отражает фактический Армстронг результата , Мне нужно, чтобы подсчитывать отображаемые строки.

Код приведен ниже.

#include <iostream> 
#include <string> 
#include <sstream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    // Change the console's background color. 
    system ("color F0"); 

    // Declare the variables 
    int i = 0, counter = 1, var1, var2, var3, var4; 

    while (i < 1000) 
    { 
     var1 = i/100; 
     var2 = (i % 100)/10; 
     var3 = (i % 100) % 10; 
     var4 = (var1 * var1 * var1) + (var2 * var2 * var2) + (var3 * var3 * var3); 

     if (i == var4) 

      cout << "\n Armstrong number " << counter << ": " << var4; 
      counter++; 
      i++; 


    } 
     cout << "\n"; 
     system ("pause"); 
     return 0; 
} 

Как исправить это?

Что мне нужно: Armstrong номер 1: 0 Armstrong номер 2: 1 Armstrong номер 3: 153 Armstrong номер 4: 370

Что я получаю: Armstrong номер 0: 0 Armstrong номер 1: номер 1 Армстронга 153: 153 Армстронг номер 370: 370

+0

Какую ценность вы ожидаете? Какую ценность вы получаете? –

ответ

6

на основе отступа, оказывается, может быть, вам нужна скобка, которые вы забыли:

if (i == var4) 
    { 
     cout << "\n Armstrong number " << counter << ": " << var4; 
     counter++; 
    } 
    i++; 

Без кронштейнов только cout является «в» заявлении if. Приращение counter и i будет выполняться каждый раз.

После более пристального изучения, я считаю, что i++ должен находиться вне закрывающей скобки.

+0

Mark - Когда я добавил скобки, выход остановился на 2. Я получил ожидаемый ответ для «Армстронг номер 1:» и «Армстронг номер 2:», но тогда программа просто сидит ... после второй выходной линии. –

+0

Вот и все! Благодаря! –

+0

* Помимо этого: * [Weird markdown rendering!] (Http://meta.stackexchange.com/q/169410/147331) – Johnsyweb

0

Марк Уилкинс прибил ключевую ошибку, но я также хотел бы отметить, что вы неправильно проверяете номера Армстронга. Он должен быть только кубиком для трехзначных чисел. Для двух цифр он должен быть квадратным, и я не уверен, что концепция имеет смысл для цифр с одной цифрой.

Кроме того, почему вы запускаете свой счетчик на одном?

+0

Я изменил его на ноль, я экспериментировал, чтобы увидеть, была ли проблема с счетчиком результатом с нуля. –

1

Некоторые советы по стилю:

, если вам необходимо инициализировать/проверить использование контура/увеличения для(), она предназначена для того
Это C++, а не C, объявлять переменные непосредственно перед использовать их
оператор инкремента специально разработан для использования в отчетности, так что если вы используете переменную только один раз и сразу же после этого увеличить его, вы идете против этой конструкции

int counter = 1; 

for (int i = 0; i < 1000; i++) 
{ 
    int var1 = i/100; 
    int var2 = (i % 100)/10; 
    int var3 = (i % 100) % 10; 
    int var4 = (var1 * var1 * var1) + (var2 * var2 * var2) + (var3 * var3 * var3); 

    if (i == var4) 
     cout << "\n Armstrong number " << counter++ << ": " << var4; 
} 

Ваш код не только стать более понятным и легче понять, но вы устранит многие эрро rs, включая тот, который у вас уже есть в коде.

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