C++ 最佳代码二进制情况
我正在尝试从我的代码中获取以下输出:C++ 最佳代码二进制情况,c++,C++,我正在尝试从我的代码中获取以下输出: 0 10 110 1110 11110 111110 但我得到的是 0 10 109 1110 11109 这是我目前的代码: void optimal(int arrsize) { int j; int code = 0; cout << '0' << endl; for (int i = 1; i < arrsize; i++) { j = i; while (j > 0) {
0
10
110
1110
11110
111110
但我得到的是
0
10
109
1110
11109
这是我目前的代码:
void optimal(int arrsize) {
int j;
int code = 0;
cout << '0' << endl;
for (int i = 1; i < arrsize; i++) {
j = i;
while (j > 0) {
code += pow(10, j);
j--;
}
cout << code << endl;
code = 0;
}
}
void最优(int-arrsize){
int j;
int代码=0;
coutpow
是一个浮点函数,然后就有舍入误差
您可以将函数重写为以下内容:
void optimal(int arrsize)
{
cout << '0' <<endl;
int code = 0;
for (int i = 0; i < arrsize ; i++)
{
++code;
code *= 10;
cout<< code << endl;
}
}
void最优(int-arrsize)
{
coutpow
是一个浮点函数,然后就有舍入误差
您可以将函数重写为以下内容:
void optimal(int arrsize)
{
cout << '0' <<endl;
int code = 0;
for (int i = 0; i < arrsize ; i++)
{
++code;
code *= 10;
cout<< code << endl;
}
}
void最优(int-arrsize)
{
cout通过非常昂贵的pow()调用,您的代码正在浪费资源。您可以通过以下方法以最佳方式获得相同的结果:
void optimal(int arrsize)
{
cout<<'0'<<endl;
for (int i = 1; i < arrsize ; i++)
{
for (int j = 1; j < i ; j++)
{
cout<<'1';
}
cout<<'0'<<endl;
}
}
void最优(int-arrsize)
{
cout通过非常昂贵的pow()调用,您的代码正在浪费资源。您可以通过以下方法以最佳方式获得相同的结果:
void optimal(int arrsize)
{
cout<<'0'<<endl;
for (int i = 1; i < arrsize ; i++)
{
for (int j = 1; j < i ; j++)
{
cout<<'1';
}
cout<<'0'<<endl;
}
}
void最优(int-arrsize)
{
cout@Rinzler对不起,我是新来的没问题,伙计,下次试着提出一个更具可读性的问题:)@Rinzler对不起,我是新来的没问题,伙计,下次试着提出一个更具可读性的问题:)那么我应该做什么呢use@AhmedELSaid:您可以创建自己的函数,或更改算法。一旦结果较大,您将产生溢出ger大于2147483647
(当int
有32位时)@AhmedELSaid如果你想进一步,你应该使用@Predrag的解决方案。另一件事,不要使用endl
,只使用'\n'
:@user007:你可以阅读,那么我应该使用什么函数use@AhmedELSaid:您可以创建自己的函数或更改算法。一旦结果大于2147483647
(当int
有32位时)。@AhmedELSaid如果你想更进一步,你应该使用@Predrag的解决方案。另外,不要使用endl
,只使用'\n'
:@user007:你可能会读到你说得很对,我们也可以移动第一行(coutOf当然。这只是为了演示这个想法,可以根据您的需要进行修改。此外,它可以处理非常大的ARR大小。但问题中的算法失败的确切原因是什么?尽管pow
函数中的两个输入都是整数??pow()的实现)不是按照您期望的方式生成的。因为它的实际效果不如10^2。为了解释,我将尽量使它简单:它是对结果值的插值。技术解释起来并不简单。@user007:它加起来是99.99999999999,然后向下舍入。舍入到最接近的解int(pow(10,j)+0.5)
工作原理是将100.49999999四舍五入到100,这可能是您所期望的。您说得很对,我们还可以移动第一行(coutOf当然。这只是为了演示这个想法,可以根据您的需要进行修改。此外,它可以处理非常大的ARR大小。但问题中的算法失败的确切原因是什么?尽管pow
函数中的两个输入都是整数??pow()的实现)不是按照您期望的方式生成的。因为它的实际效果不如10^2。为了解释,我将尽量使它简单:它是对结果值的插值。技术解释起来并不简单。@user007:它加起来是99.99999999999,然后向下舍入。舍入到最接近的解int(pow(10,j)+0.5)
的工作原理是将100.49999999四舍五入到100,这可能是您所期望的。