C ++分离整数

时间:2015-07-06 06:35:50

标签: c++ integer

int quotient(int , int );
int remainder(int , int );
void seperate(int);    

int main()
{
    int input;

    cout << "Input int " << endl;
    cin >> input;

    seperate(input);
}


int quotient(int divident, int divisor)
{
    return divident / divisor;
}

int remainder(int divident, int divisor)
{
    return divident % divisor;
}

void seperate(int input)
{

    int integers[6] = {};

    for (int i = 1; i <= 5; i++)
    {
        integers[i] = quotient(remainder(input, pow(10, 6 - i)), pow(10,5 - i));
    }

    for (int i = 1; i <= 5; i++)
    {
        cout << integers[i] << setw(2);
    }

    cout << endl;

}

我想知道为什么整数分离适用于具有较小值的整数(ex 1234),但不适用于较大的值(ex 32767)。这些大输入值的结果为3 2-2-3-3(带破折号)。有什么建议吗?

4 个答案:

答案 0 :(得分:2)

double pow (double base, double exponent);

pow()返回double但在被调用的函数中,您收到的值为int

尝试向下转发:

integers[i] = quotient(remainder(input, (int)pow(10, 6 - i)),
                                         ^^^  
                (int)pow(10, 5 - i));
                 ^^^

说明: math.h还有一个名为remainder的函数,

extern double remainder _PARAMS((double, double));

因此,当你调用remainder(int&, double)时,编译器检测编译器执行哪个remainder()是不明确的。

答案 1 :(得分:0)

向下转发返回类型的pow到int并将剩余函数名称更改为余数是预定义函数。

答案 2 :(得分:0)

如果您不想使用中间值(整数的数字),您可以大大简化它。例如

#include <bits/stdc++.h>
using namespace std;

void print(int input) {
    if (input < 1) return;
    print(input / 10);
    cout << input % 10 << setw(2);
}

int main() {
    int input;
    cin >> input;
    print(input);
    return 0;
}

<强>输入

32233

<强>输出

3 2 2 3 3

或使用字符串打印(C++11

#include <bits/stdc++.h>
using namespace std;

int main() {
    int input;
    cin >> input;
    for (auto i : to_string(input))
        cout << i << setw(2);
    return 0;
}

答案 3 :(得分:0)

浮点计算通常不准确。例如,当您调用pow(10, 3)时,您希望结果完全 1000,而不是浮点容差为1000的内容。

当数字变得足够大时,这些错误会产生影响。由于您使用的是不连续的功能,因此它们可能会产生非常大的效果。

您需要做的是完全避免浮点运算:不要使用pow来计算这些数量。找到另一种方法,例如编写自己的整数取幂函数。