为什么这个C ++代码不能用于负整数?

时间:2013-12-17 09:20:00

标签: c++ integer

#include<iostream>
using namespace std;
int x;
int y;
int z;
int main ()
{
    cout << "x=";
    cin >> x;
    z = x;
    y = 0;
    while(z > 0)
    {
        (z = z / 10);
        (y = y + 1);
    }
    while(z < 0)
    {
        (z =- z);
        (z = z / 10);
        (y = y + 1);
    }
    cout << "cifre=" << y;
}

对于正整数似乎工作得很好,但对于负整数似乎不行,我不明白为什么。谁能解释一下?它必须计算位数......

2 个答案:

答案 0 :(得分:7)

对于负整数,它不起作用,因为在z循环的每次迭代中都会翻转while (z<0)的符号。因此,循环将在第一次迭代后停止,y为1。

答案 1 :(得分:1)

使用此

cout <<"x=";
cin >>x;
z=x;
y=0;
if(z<0)
    z=-z;
while(z>0)
{
    z=z/10;
    y=y+1;
}
cout <<"cifre=" <<y;