#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void mulpl(string ch1, string ch2) {
int len1 = ch1.size();
int len2 = ch2.size();
char ch3[1000009];
for (int i = 0; i < 1000009; ++i)
ch3[i] = '\0';
for (int i = 0; i < len1; ++i) {
for (int j = 0; j < len2; ++j) {
ch3[i+j] += (ch1[i] - '0') * (ch2[j]-'0');// 直接实现了移位相加
if (ch3[i + j] > 9 && (i + j) > 0) {
ch3[i + j - 1] += ch3[i + j] / 10;
ch3[i + j] %= 10;
}
}
}
for (int i = len1 + len2 - 1; i > 0; --i) {
if (ch3[i] > 9) {
ch3[i - 1] += ch3[i] / 10;
ch3[i] %= 10;
}
}
if (ch3[0] > 9) {
cout << ch3[0] / 10;
ch3[0] %= 10;
}
for (int i = 0; i < len1 + len2 - 1; ++i)
cout << char(ch3[i] + '0');
cout << endl;
}
void add(string ch1, string ch2) {
int len1 = ch1.size();
int len2 = ch2.size();
char ch3[1000009];
for (int i = 0; i < 1000009; ++i)
ch3[i] = '\0';
int lenmax = max(len1,len2);
for (int i = 0; i < lenmax; ++i) {
char c1, c2;
c1 = i > len1 ? '0' : ch1[i];
c2 = i > len2 ? '0' : ch2[i];
ch3[i] = c1-'0' + c2-'0';
}
for (int i = lenmax; i > 0; --i) {
if (ch3[i] > 9) {
ch3[i - 1] += ch3[i] / 10;
ch3[i] %= 10;
}
}
if (ch3[0] > 9) {
cout << ch3[0] / 10;
ch3[0] %= 10;
}
for (int i = 0; i < lenmax; ++i)
cout << char(ch3[i] + '0');
cout << endl;
}
int main()
{
string s1, s2;
cin >> s1 >> s2;
mulpl(s1,s2);
add(s1,s2);
return 0;
}
网友评论