将两个大整数相乘作为整数向量存储

时间:2014-11-24 15:30:35

标签: c++ vector

我必须将两个整数相乘,这些整数存储为向量。要存储我正在使用的最终结果

std::vector<std::vector<int>> result

其中我存储部分结果行,最后一行存储最终结果。我已经计算了部分结果行,现在必须添加它们。我已经有一个大的整数加法函数。要对齐部分结果行是什么我做的是根据需要在所有部分结果行中追加零(第1个零结果行附加1个零,第3个部分结果行附加2个0)。然后我添加所有部分结果行并将结果存储在另一行中。现在我以类似的方式删除附加的零。

void putzeroesatend(std::vector<std::vector<int>> &something)
{
    std::vector<std::vector<int>>::iterator i;      
    int k=0;
    for(i=something.begin();i!=something.end();i++,k++)
    {
        for(int p=1;p<=k;p++)
           (*i).push_back(0);
    }
}
void removezeroesatend(std::vector<std::vector<int>> &something)
{
     std::vector<std::vector<int>>::iterator i;
     int k=0;
     for(i=something.begin();i!=something.end()-1;i++,k++)
     {
         for(int p=1;p<=k;p++)
        (*i).pop_back();
     }
 }

然后在计算部分结果后的乘法函数中,我执行以下操作

putzeroesatend(result);
std::vector<int> newrow;
result.push_back(newrow);

for(p=result.begin();p!=result.end()-1;p++)
{
    result[result.size()-1]=add(result[result.size()-1],*p);
}

removezeroesatend(result);

这是有效的,但是添加部分结果可以是更好的解决方案,而无需附加零然后将其删除。

1 个答案:

答案 0 :(得分:0)

正如@Mark Ransom推荐的那样,你可以创建一个带有未对齐操作数的add函数。但我认为将大型int表示封装在包含指数的类中然后为这些对象编写操作数可能会更好。