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附加建议:激活编译器配置选项以获得所有警告,并将所有警告视为错误。编译器通常会发出诸如赋值/测试等警告的问题。