第一个是加法第二个是减法。我感觉这种再竞赛写出来挺难的,最好是背一下但最为初学者的我觉得还是先放放比较好,然后思路其实就是把思路放在一个数组然后进行一些一系列的骚操作。细节有很多要注意的,我也是再洛谷刷题遇到的。emm就很nice。加油,patience和坚持加油!
#include<iostream>
#include <string>
using namespace std;
int main() {string s1, s2;int a1[210], a2[210], a3[210] = { 0 };getline(cin, s1);getline(cin, s2);for(int i=0;i<s1.size();i++){a1[s1.size() - i - 1] = s1[i] - '0';
}for (int i = 0; i < s2.size(); i++) {a2[s2.size() - i - 1] = s2[i] - '0';}int len = s1.size();if (s2.size() > s1.size()) {len = s2.size();}for (int i = 0; i < len; i++) {a3[i] = a1[i] + a2[i];}for (int i = 0; i < len; i++) {if (a3[i] > 10) {a3[i + 1] = a3[i + 1] + a3[i] / 10;a3[i] = a3[i] % 10; }}if (a3[len] != 0) {len++;}for (int i = len - 1; i >= 0; i--) {cout << a3[i];}
}
#include<iostream>
#include<cstring>
using namespace std;
char s1[2005], s2[2005];
int a[2005], b[2005], c[4005]; // c的长度应该是a和b的长度之和
int main() {int la, lb, lc;cin >> s1 >> s2;la = strlen(s1);lb = strlen(s2);// 倒序存储字符串中的数字for (int i = 0; i < la; i++)a[i] = s1[la - 1 - i] - '0'; // s1倒序存入afor (int i = 0; i < lb; i++)b[i] = s2[lb - 1 - i] - '0'; // s2倒序存入blc = la + lb; // 结果可能的最大位数// 大数乘法核心逻辑for (int i = 0; i < la; i++) {for (int j = 0; j < lb; j++) {c[i + j] += a[i] * b[j]; // 对应位相乘并累加到结果数组c[i + j + 1] += c[i + j] / 10; // 处理进位c[i + j] %= 10; // 当前位保持为个位数}}// 去掉前导0while (lc > 1 && c[lc - 1] == 0)lc--;// 输出乘法结果(需要从高位到低位输出)for (int i = lc - 1; i >= 0; i--)cout << c[i];cout << endl;return 0;
}