C++ 如何使用向量<;int>;进行非常大的整数乘法

C++ 如何使用向量<;int>;进行非常大的整数乘法,c++,C++,我试图用向量来做非常大的乘法运算,在运行我的算法时,我一直遇到一个问题 vector<vector<int>> finalresult; vector<int> currentrow; int carry=0, workingnum=0, innerval =0, curnt=0, j=0; for (auto an = a.rbegin(); an != a.rend(); ++an) { for (auto bn = b.rbegin(); bn

我试图用向量来做非常大的乘法运算,在运行我的算法时,我一直遇到一个问题

vector<vector<int>> finalresult;
vector<int> currentrow;
int carry=0, workingnum=0, innerval =0, curnt=0, j=0;

for (auto an = a.rbegin(); an != a.rend(); ++an)
{
    for (auto bn = b.rbegin(); bn != b.rend(); ++bn)
    {
        curnt = (*an) * (*bn);
        if (curnt > 10 && carry ==0)
        {
            carry = curnt / 10;
            currentrow.push_back(curnt % 10);
        }
        if (curnt < 10 && carry ==0)
        {
            currentrow.push_back(curnt);
        }
        if (curnt < 10 && carry >0)
        {
            if ((curnt + carry) < 10)
            {
                currentrow.push_back(curnt + carry);
            }
            else
            {
                workingnum = curnt + carry;
                carry = workingnum / 10;
                currentrow.push_back(workingnum % 10);
            }
        }
        else
        {
            workingnum = curnt + carry;
            carry = workingnum / 10;
            currentrow.push_back(workingnum % 10);
        }

    }
    finalresult.push_back(currentrow);
    for (int i = 0; i < currentrow.capacity(); i++)
    {
        currentrow.pop_back();
    }
    for (int i=0; i < j; i++)
    {
        currentrow.push_back(0);
    }
    j++;
}
向量最终结果;
矢量电流行;
int进位=0,workingnum=0,innerval=0,curnt=0,j=0;
对于(自动an=a.rbegin();an!=a.rend();++an)
{
对于(自动bn=b.rbegin();bn!=b.rend();++bn)
{
电流=(*an)*(*bn);
如果(电流>10&&进位==0)
{
进位=电流/10;
当前行。推回(当前值%10);
}
if(电流<10&&carry==0)
{
当前行。推回(当前);
}
如果(电流<10且进位>0)
{
如果((电流+进位)<10)
{
当前行。推回(电流+进位);
}
其他的
{
workingnum=电流+进位;
进位=工作数/10;
currentrow.push_back(工作编号%10);
}
}
其他的
{
workingnum=电流+进位;
进位=工作数/10;
currentrow.push_back(工作编号%10);
}
}
最终结果。推回(当前行);
对于(int i=0;i
每次运行该代码时,如果它碰到一个内部if语句,比如if curnt<10和carry==0,它将向后推curnt,但在else部分也会再次这样做。我无法理解为什么它也发生在else部分。(我知道这是因为调试而发生的事情)有人能解释一下吗?

你有:

if (curnt < 10 && carry >0)
{
    if ((curnt + carry) < 10)
    {
        currentrow.push_back(curnt + carry);
    }
    else
    {
        workingnum = curnt + carry;
        carry = workingnum / 10;
        currentrow.push_back(workingnum % 10);
    }
}
else
{
    workingnum = curnt + carry;
    carry = workingnum / 10;
    currentrow.push_back(workingnum % 10);
}


在维基百科中查找bignum库怎么样?我想大多数人都会使用gnu。我建议你评论一下你的代码。如果你把面包屑留给自己,分析代码可能会更容易。这不是一个真正的代码问题,而是一个文档/意图/清晰性问题。另外,curnt==10的情况如何?我对我的结束有一些评论,觉得它们不需要在这里,所以我把它们拿了出来。curnt==10在else语句中处理。else是否仅与else语句正上方的if语句绑定?如果是这样的话,那么所有的if减去第一个if是否应该是‘else if’?@lups,yes和yes。您也可以使用我在回答中建议的简化版本。@R Sahu,啊,我不明白您建议替换那里的所有内容。谢谢你的回答。
if (curnt > 10 && carry ==0)
{
   carry = curnt / 10;
   currentrow.push_back(curnt % 10);
}
if (curnt < 10 && carry ==0)
{
   currentrow.push_back(curnt);
}
if (curnt < 10 && carry >0)
{
   if ((curnt + carry) < 10)
   {
      currentrow.push_back(curnt + carry);
   }
   else
   {
      workingnum = curnt + carry;
      carry = workingnum / 10;
      currentrow.push_back(workingnum % 10);
   }
}
else
{
   workingnum = curnt + carry;
   carry = workingnum / 10;
   currentrow.push_back(workingnum % 10);
}
curnt += carry;
carry = curnt / 10;
currentrow.push_back(curnt % 10);