【问题标题】:Divide and Conquer multiplication problem c++分而治之的乘法问题c ++
【发布时间】:2020-05-02 16:33:45
【问题描述】:

我刚刚开始使用 c++,在算法课程中有一个伪代码,我已经尝试将它转换为 c++,但我失败了如何转换 c++ 任何线索都可以帮助我谢谢。

+关于乘法数组,这个数组的元素是 x 到 1 2 .... n 的常数,大小相同。 a1 和 b1 默认为零。

+ı 在 python 中轻松编写相同的代码,但 c++ ı 不知道如何破坏类型安全规则。

int* Mult2(int arr1[], int arr2[],int a1,int b1, int size)
{
    int* R = new int[ 2* size - 1];
        if ( size == 1 )
    {
        R[0] = arr1[a1] + arr2 [b1];
        return R;
    } 
    R = Mult2(arr1, arr2, a1, b1, size/2);
    R = Mult2(arr1, arr2, a1+ size/2 , b1+ size/2 , size/2) ;

    int* D0E1 = Mult2(arr1, arr2, a1, b1+size/2, size/2);
    int* D1E0 = Mult2(arr1, arr2, a1+size/2 , b1, size/2);
    R += D0E1 + D1E0;
    return R;
}

错误:'int*' 和 'int*' 类型的无效操作数到二进制 'operator+' R += D0E1 + D1E0;

【问题讨论】:

  • 错误信息很清楚:不能添加指针。
  • 好的,谢谢

标签: list pointers divide-and-conquer


【解决方案1】:

我不能添加两个指针。所以

int* Mult2(int arr1[], int arr2[],int a1,int b1, int size)
{
    int* R = new int[ 2* size - 1];
        if ( size == 1 )
    {
        R[0] = arr1[a1] + arr2 [b1];
        return R;
    } 
    R = Mult2(arr1, arr2, a1, b1, size/2);
    R = Mult2(arr1, arr2, a1+ size/2 , b1+ size/2 , size/2) ;

    int* D0E1 = Mult2(arr1, arr2, a1, b1+size/2, size/2);
    int* D1E0 = Mult2(arr1, arr2, a1+size/2 , b1, size/2);
    for( int i = 0; i < size ; i++)
    {
        R[i] = D0E1[i] + D1E0[i];
    }
    return R;
}

【讨论】:

    猜你喜欢
    • 2019-08-02
    • 2020-09-24
    • 2012-03-04
    • 2014-12-12
    • 2018-07-26
    • 2020-04-11
    • 2017-12-05
    • 2017-07-16
    • 2017-06-08
    相关资源
    最近更新 更多