在超过9-11位数(C ++)

时间:2017-09-26 15:11:35

标签: c++ long-integer

FIXED:收到num变量并将其打印在计算器屏幕上的函数,收到了" int"参数

我是初学者并试图在控制台上制作计算器。您必须像在实际计算器中一样键入每个数字,它们出现在左侧。

这是获取下一个输入数字的函数,所以我知道我必须运行多少0。

int getDigits(int number)
{
    int getDigits = 0;
    while (number) {
        number /= 10;
        getDigits++;
    }
    return getDigits;
}

更新的GETDIGIT功能

long long getDigits(long long number)
{
    long long getDigits = 0; //i know long long wasn't needed here
    while (number) {
        number /= 10;
        getDigits++;
    }
    return getDigits;
}

计算器屏幕上显示的主号码是一个很长的数字" num"并且它在迭代时每次都会改变。

case 1:
        long long aux, aux2;
        cout << "Number: "; cin >> aux;
        aux2 = pow(10, getDigits(aux));
        num *= aux2;
        num += aux;
        break;

这只是将第二个输入放在右边。它工作得很好但是 在这种情况下,&#34; num&#34; excel 11变量,它只是一个负数(我不知道为什么,我手动完成操作,它应该工作正常)。例如:

输入:1

num = 1

输入:2

num = 12

但是当它达到11位

num = 12345678911

input = 1

num = -538112777(而不是123456789111)

这是为什么?我所有的变量都很长,应该足够了,非常感谢。

3 个答案:

答案 0 :(得分:1)

C ++中的整数容量有限。超出容量或范围会导致溢出。

溢出可以环绕并变为负数。该平台可能会生成溢出异常。

答案 1 :(得分:0)

仔细查看您的代码,首先

{
 int getDigits(int number)
{
 int getDigits = 0; 
 while (number) {
 number /= 10; 
 getDigits++; 
} 
return getDigits; 
}

您正在将getDigits(long long aux)传递给getDigit函数,这是错误的。

另外:为什么值变为负数:8位用于存储人民币,其中人民币从右到左为第8,第一个从左到右,当值超过二进制127时,最右边的位被设置为值负。 签名的所有数据类型

也是如此

答案 2 :(得分:0)

FIXED:收到num变量并将其打印在计算器屏幕上的函数,收到“int”参数