This问题要求您将两个给定的字符串相乘。我知道逻辑,并且一直在执行。逻辑是遵循旧式乘法技术。在调试我的代码时,我陷入了一个非常奇怪的疑问,即即使条件为true, if语句也不会执行。
// Example program
#include <bits/stdc++.h>
using namespace std;
string multiply(string A, string B) {
vector<string> s;
for(int i=B.size()-1; i>=0; i--){
int sum=0, carry=0;
string ans="";
for(int j=A.size()-1; j>=0; j--){
int sum = (A[j]-'0')*(B[i]-'0')+carry;
carry = sum/10;
sum = sum%10;
ans += (sum + '0');
}
if(carry>0){
ans += (carry + '0');
}
reverse(ans.begin(), ans.end());
s.push_back(ans);
}
int maxx = INT_MIN;
/*Concatenating adequate amount of zeroes to different lines */
for(int i=0; i<s.size(); i++){
int j=i;
//cout<<s[i]<<endl;
while(j--){
s[i]+="0";
}
//cout<<s[i]<<endl;
//cout<<s[i].size()<<endl;
if(maxx < s[i].size()){
cout<<"True"<<endl;
maxx=s[i].size();
}
else{
cout<<"Not true"<<endl;
}
}
/*for(int i=0; i<s.size(); i++){
cout<<s[i]<<endl;
}
cout<<maxx<<endl;
for(int i=0; i<s.size(); i++){
int x=maxx-s[i].size();
while(x--){
s[i] = "0"+s[i];
}
}
for(int i=0; i<s.size(); i++){
cout<<s[i]<<endl;
}*/
return "No answer";
}
int main()
{
string ans = multiply("1234","567");
return 0;
}
我对此部分的 if陈述表示怀疑:
for(int i=0; i<s.size(); i++){
int j=i;
//cout<<s[i]<<endl;
while(j--){
s[i]+="0";
}
//cout<<s[i]<<endl;
//cout<<s[i].size()<<endl;
if(maxx < s[i].size()){
cout<<"True"<<endl;
maxx=s[i].size();
}
else{
cout<<"Not true"<<endl;
}
}
我在if语句之前打印了 s [i] .size()值和 maxx 值。最初,s [i] .size()大于maxx。但是打印的输出仍然是 Not True 而不是 True 。
您可以将代码复制粘贴到计算机中进行调试。其完全有效的代码。
我已经坚持了很长时间。出于奇怪的原因,请提出该声明不起作用。 预先感谢!