0

这是一个非常具体的案例,但我是 C++ 新手,不理解我为项目 euler 网站编写的这个程序的输出。

int x = 999;
int y = 999;
string result;

while (x > 320)
  {
    while(y > 320)
      {
        int inttoconvert = (x*y);
        cout<<inttoconvert<<"<-----This is product"<<endl;
        string result;
        ostringstream convert;
        convert << inttoconvert;
        result = convert.str();

        if (result[0] == result[5] && result[1] == result[4] && result[2] == result[3])
          {
            cout<<"The largest palindrome of 2 3-digit numbers is  "<<result<<endl;
            y = 0;
            x = 0;
          }
        else
          { 
            cout<<y<<endl;
            y--;
          }
      }//end while
    cout<<"this is x---->"<<x<<endl;
    x--;

  }//end while

输出显示 x 仅在 y 递减到 321 后才递减,但随后它会重复递减并且程序不会再次进入第二个 while 循环。

我开始对视觉快递产生怀疑

4

4 回答 4

2

y您应该在循环开始时初始化x,而不是在两个循环之外。

int x = 999;
string result;

while (x > 320)
  {
    int y = 999;
    while(y > 320)

您也可以使用for循环而不是while

for (int x = 999; x > 320; x--) {
   for (int y = 999; y > 320; y--) {
     ...
   }
}
于 2013-05-30T02:48:41.583 回答
2

程序不会再次进入第二个 while 循环,因为嵌套循环都共享相同的范围。y退出第二个 while 循环后不会再次重置。所以一旦y不能满足内部循环的条件,它就不会进入它,它会跳过它并直接进入 decrementing x

于 2013-05-30T02:38:17.390 回答
1

你从不重置 y,我相信这就是你遇到问题的原因

于 2013-05-30T02:37:14.120 回答
0

进入循环。在 (y > 320) 循环之后,y 等于 320。退出 (y 大于 320) 循环。x 减至 998。再次检查 (x > 320) 条件。这是真的,所以它再次尝试执行 (y > 320) 循环。y 仍然等于 320,因此它永远无法再次进入该循环。因此,它将继续跳过该循环并递减 x。

于 2013-05-30T02:42:14.387 回答