当前位置: 首页> 游戏> 评测 > 高精度加法和乘法代码自用

高精度加法和乘法代码自用

时间:2025/7/11 3:00:04来源:https://blog.csdn.net/2301_80844586/article/details/142282605 浏览次数:0次

 第一个是加法第二个是减法。我感觉这种再竞赛写出来挺难的,最好是背一下但最为初学者的我觉得还是先放放比较好,然后思路其实就是把思路放在一个数组然后进行一些一系列的骚操作。细节有很多要注意的,我也是再洛谷刷题遇到的。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;
}

关键字:高精度加法和乘法代码自用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: