P1136高精度乘法
#include<iostream> #include<cstring> using namespace std; //将字符串每一位改为数字,再反向计算,最后处理进位问题。 int main() { char a[101], b[101]; //定义字符数组是为了好测量,输入的长度 while (cin >> a >> b) { char swap[101]; //用来进行交换的,超过a的长度小于b的长度 int a1[101] = { 0 }, b1[101] = { 0 }; //接受a与b的,并将其转化为整形数组和反转 int lena1, lenb1; //测量a与b的长度 lena1 = strlen(a), lenb1 = strlen(b); int n; //接受lena1与lena2的最大值,并且为下面的动态数组做准备 n = (lena1 > lenb1 ? lena1 : lenb1); //申请动态数组,a与b的乘积最多有2*n位数 int *p; p = new int[2 * n]; //将p数组清零 memset(p, 0, sizeof(int)*(2 * n)); //控制b1为最短的数组 if (lena1 < lenb1) { strcpy(swap, b); strcpy(b, a); strcpy(a, swap); } lena1 = strlen(a), lenb1 = strlen(b); //反转a数组 for (int i1 = lena1 - 1; i1 >= 0; i1--) { a1[lena1-1-i1] = a[i1] - '0'; } //反转数组b for (int k1 = lenb1 - 1; k1 >= 0; k1--) { b1[lenb1 - 1 - k1] = b[k1] - '0'; } int len; //控制p数组从第几位开始 for (int i = 0; i < lenb1; i++) { len = i; for (int k = 0; k < lena1; k++) { p[len] += b1[i] * a1[k]; if (p[len] > 9) { p[len + 1] += p[len] / 10; p[len] = p[len] % 10; } len++; } } while (p[len] == 0) { len--; } for (int k2 = len ; k2 >= 0; k2--) { cout << p[k2]; } delete[]p; cout << endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效