C++ 用C+乘以大数字+;-有错误的代码?如何改进?

C++ 用C+乘以大数字+;-有错误的代码?如何改进?,c++,algorithm,c++11,multiplication,C++,Algorithm,C++11,Multiplication,我们得到一个任务,写一个大数字相乘的函数,将结果打印在屏幕上 以下是我目前的代码: void mnozenie(string a, string b) { if(a=="0"||b=="0") cout<<0; else { bool minus=false; if((a[0]=='-'&&b[0]!='-')||(b[0]=='-'&&a[0]!='-')) minus=true;

我们得到一个任务,写一个大数字相乘的函数,将结果打印在屏幕上

以下是我目前的代码:

void mnozenie(string a, string b)
{
    if(a=="0"||b=="0")
        cout<<0;
  else 
  {

    bool minus=false;

    if((a[0]=='-'&&b[0]!='-')||(b[0]=='-'&&a[0]!='-'))
        minus=true;

    if(a[0]=='-')
        a.erase(a.begin());

    if(b[0]=='-')
        b.erase(b.begin());    

    if(a.size()<b.size())
        swap(a,b);

    vector<int> C;
    for(int i=0; i<(int)a.size()+(int)b.size(); i++)
        C.push_back(0);

    for(int i=(int)b.size()-1; i>=0; i--)
    {
        for(int j=(int)a.size()-1; j>=0; j--)
        {
            C[i+j+1]+=((a[j]-'0')*(b[i]-'0'));
            int k=i+j+1;
            while(C[k]>9&&k>0)
            {
               C[k-1]+=C[k]/10;
               C[k]=C[k]%10;
               k--; 
            }

        }



    }

    while(C[0]==0)
        C.erase(C.begin());

    if(minus)
        cout<<"-";

    for(int i=0; i<(int)C.size(); i++)
        cout<<C[i];

    cout<<endl;
   }     



}
void mnozenie(字符串a、字符串b)
{
如果(a==“0”| | b==“0”)
cout0)
{
C[k-1]+=C[k]/10;
C[k]=C[k]%10;
k--;
}
}
}
而(C[0]==0)
C.擦除(C.开始());
如果(减)

不能肯定这是唯一的问题,但这是一个问题

当你写作时

  if ( a[0] = '-')
     a.erase(a.begin());

  if ( b[0] = '-')
     b.erase(b.begin());  
在测试中,
'-'
分配给
a[0]
b[0]

我猜想您的意图是测试如果
a[0]
'-'
(与
b[0]

所以我建议在

  // .......vv
  if ( a[0] == '-')
     a.erase(a.begin());

  // .......vv
  if ( b[0] == '-')
     b.erase(b.begin());   

你得到了什么结果?你期望得到什么结果?请更好地格式化你的代码,以便我们更容易阅读。例如:
int k=i+j+1;
输入是什么?输出是什么?你期望得到什么输出?调试器告诉你什么?我看不出我的错误在哪里-在这段代码上花了很长时间。--我不想说t他的,但如果你自己写代码的话,这样说永远不应该成为一个选项。每次你写程序的时候,你必须确定每一行、循环、变量声明、赋值应该做什么。如果你然后运行你的程序,而它的行为与它应该做的不一样,你应该确切地知道该寻找什么看看问题在哪里。现在它几乎是正确的-当它给出错误的结果时,我找不到任何情况,但是当我提交代码时,我得到了错误的答案。非常感谢!天哪,我仍然犯这样愚蠢的错误。//不幸的是,它仍然产生不正确的结果:(但它比它好was@Natalia附加建议:激活编译器配置选项以获得所有警告,并将所有警告视为错误。编译器通常会发出诸如赋值/测试等警告的问题。