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;

cout
pow
是一个浮点函数,然后就有舍入误差

您可以将函数重写为以下内容:

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;
    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,这可能是您所期望的。