为什么这段代码没有显示正确的计算答案,为什么它无限循环?

时间:2014-11-30 14:22:43

标签: c++

  

我正在尝试使用计算来分隔数字,然后将它们平方,然后添加
  他们在一起。因此,79将变为7和9.然后我希望它将7和9平方并添加结果。   并重新做一遍,直到我有50个结果或结果变为1.它也循环
  无限地。任何想法??

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
using namespace std;

int main ()
{   
int number = 79;
int newNumber1;
int newNumber2;
int digit1;
int digit2;
int count;
int counter = 1;

 while(number != 1 && counter != 50)
 {
    for(count = 1; count <= 10; count++)
    {
        cout << setw(8) << number;
        counter++;
        digit1 = number / 10;
        digit2 = number % 10;
        newNumber1 = pow(digit1 , 2);
        newNumber2 = pow(digit2 , 2);
        number = newNumber1 + newNumber2;
    }
  }
   cout << endl << endl;
   return 0;
}

1 个答案:

答案 0 :(得分:3)

内部for循环每次外循环迭代将运行10次。这意味着在第一个外循环迭代中,counter将是1,第二个11,第三个21,第四个31,第五个41 {1}}和第六个51;因此条件counter != 50应该是counter < 50

number背后的逻辑在某种程度上似乎也存在缺陷。在第一次迭代newNumber1 = 49newNumber2 = 81中,您有number = 49 + 81 = 130。现在下一次迭代你有newNumber1 = 13 ^ 2newNumber2 = 0。所以这个数字似乎总是在增加 number = 1只有在您newNumber1 = 1newNumber2 = 0或反之时才会发生。仅当digit1digit2= 1时才会发生这种情况。这仅在number = 10时发生,但number = 10似乎永远不会发生。所以条件number != 1并没有多大意义。