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(带破折号)。有什么建议吗?
答案 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
来计算这些数量。找到另一种方法,例如编写自己的整数取幂函数。