1、相加
#include <cstdio>
#include <iostream>
using namespace std;
string add(string s1, string s2) { //s1更长
if(s1.length() < s2.length()) {
string temp = s1;
s1 = s2;
s2 = temp;
}
for(int i = s1.length() - 1, j = s2.length() - 1; i >= 0; i--, j--) {
s1[i] += j >= 0 ? s2[j] - '0' : 0;
if(s1[i] - '0' >= 10) { //进位
s1[i] = (s1[i] - '0') % 10 + '0';
if(i) s1[i - 1]++; //是否需要补位
else s1 = '1' + s1;
}
}
return s1;
}
int main() {
string a, b;
while(cin >> a >> b){
cout << add(a, b) << endl;
}
return 0;
}
2、相减
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int flag = 0;
string sub(string s1, string s2){
for(int i = s1.length() - 1, j = s2.length() - 1; j >= 0; i--, j--){
if(s1[i] >= s2[j]){
s1[i] = s1[i] - s2[j] + '0';
}
else{
int k = i;
s1[i] = s1[i] + 10 - s2[j] + '0';
while(s1[k - 1] == '0'){ //借位
s1[k - 1] = '9';
k--;
}
s1[k-1]--;
}
}
while(s1[0] == '0'){ //去掉前导0
if(s1.length() == 1) break;
s1.erase(0, 1);
}
return s1;
}
int main()
{
string a, b;
while(cin >> a >> b){
flag = 0;
if(a.length() < b.length()) flag = 1;
else if(a.length() == b.length() && a < b) flag = 1;
if(flag) cout << "-" << sub(b, a) << endl;
else cout << sub(a, b) << endl;
}
return 0;
}
3、相乘
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
const int maxn = 500007;
string s1, s2;
int ans[maxn];
void mul(string a, string b){
for(int i = b.length() - 1; i >= 0; i--){
for(int j = a.length() - 1; j >= 0; j--){
ans[b.length() - 1 - i + a.length() - 1 - j] += (b[i] - '0') * (a[j] - '0');
}
}
for(int i = 0; i < a.length() + b.length() - 1; i++){
if(ans[i] >= 10){
ans[i + 1] += ans[i] / 10;
ans[i] %= 10;
}
}
return;
}
int main()
{
while(cin >> s1 >> s2){
if(s1 == "0" || s2 == "0"){
cout << "0" << endl;
continue;
}
memset(ans, 0, sizeof(ans));
if(s1.length() < s2.length()){
string tmp = s1;
s1 = s2;
s2 = tmp;
}
mul(s1, s2);
int flag = 0;
for(int i = s1.length() + s2.length() - 1; i >= 0; i--){
if(ans[i] == 0 && flag == 0){
continue;
}
else{
flag = 1;
cout << ans[i];
}
}
cout << endl;
}
return 0;
}
4、相除
#include <iostream>
using namespace std;
string ans, rem; //ans为商,rem为余数
string sub(string s1, string s2)
{
for (int i = s1.length() - 1, j = s2.length() - 1; j >= 0; i--, j--){
if (s1[i] >= s2[j]){
s1[i] = s1[i] - s2[j] + '0';
}
else{
int k = i;
s1[i] = s1[i] + 10 - s2[j] + '0';
while (s1[k - 1] == '0'){
s1[k - 1] = '9';
k--;
}
s1[k - 1]--;
}
}
while (s1[0] == '0'){
if (s1.length() == 1)
break;
s1.erase(0, 1);
}
return s1;
}
string div(string a, string b)
{
ans.clear();
int lena = a.length(), lenb = b.length();
for (int i = lenb; i < lena; i++){
b += '0';
}
while (lena >= lenb){
int cnt = 0;
while (a.length() > b.length() || (a.length() == b.length() && a >= b)){
a = sub(a, b);
cnt++;
}
ans += (cnt + '0');
lena--;
b.erase(lena, 1);
}
rem = a;
if (ans.length() == 0) ans += '0';
else if (ans[0] == '0') ans.erase(0, 1);
return ans;
}
int main()
{
string s1, s2;
while (cin >> s1 >> s2){
cout << div(s1, s2) << endl << rem << endl;
}
return 0;
}