拼多多编程题:大整数相乘

题目:https://www.nowcoder.com/practice/0f0badf5f2204a6bb968b0955a82779e?tpId=90&tqId=30777&tPage=1&rp=1&ru=/ta/2018test&qru=/ta/2018test/question-ranking

#include

using namespace std;

void AddTwoStr(string &s1,string &s2,string &sum){

int carry = 0;

int sz = s1.size();

sum = "";

for(auto i =sz - 1;i >= 0;--i){

char cur = ((s1[i] - '0') +(s2[i] - '0') + carry) % 10 + '0';

carry = ((s1[i] - '0') +(s2[i] - '0') + carry) / 10;

sum += cur;

}

if(carry)

sum += carry  + '0';

reverse(sum.begin(),sum.end());

}

string func(string s1,string s2){

int sz1 = s1.size();

int sz2 = s2.size();

if(sz1 < sz2){

string tmp = s1;

s1 = s2;

s2 = tmp;

sz1 = s1.size();

sz2 = s2.size();

}

vector strs(sz2);

string cur;

int carry = 0,k = 0;

for(auto i = sz2 - 1;i >= 0;--i){

cur = "";

carry = 0;

for(auto j = sz1 - 1;j>=0;--j){

cur += ((s2[i] - '0')*(s1[j] - '0') + carry) % 10 + '0';

carry = ((s2[i] - '0')*(s1[j] - '0') + carry) / 10;

}

if(carry)

cur += carry + '0';

reverse(cur.begin(),cur.end());

strs[k++] = cur;

}

for(auto i = 0;i < sz2;++i)

strs[i] += string(i,'0');

for(auto i = 0;i < sz2;++i)

strs[i] = string(strs[sz2 - 1].size() - strs[i].size(),'0') + strs[i];

if(sz2 == 1)

return strs[0];

cur = "";

AddTwoStr(strs[0],strs[1],cur);

for(auto i = 2;i

string tmp(cur);

AddTwoStr(strs[i],tmp,cur);

}

return cur;

}

int main(){

string s1,s2;

while(cin >> s1 >> s2){

cout<

}

return 0;

}

你可能感兴趣的:(拼多多编程题:大整数相乘)