杨校老师课堂之C++高精度乘法

题目描述

输入两个高精度整数M和N(不超过100位)。求这两个高精度数的积。

输入描述

每一组测试数据占2行,一行一个整数

输出描述

每一组测试数据输出占一行,输出乘积

样例

输入

36

3

输出

108

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;
// a数组用于存储s1 字符串 
// b数组用于存储s2 字符串 
// c数组用于存储结果,中途来存放进位,100位 × 100 位  最多是200位 
int a[105],b[105],c[205];
int main(){
	string s1,s2;
	cin >> s1 >> s2;
	int len1 = s1.size();
	int len2 = s2.size();
	// 翻转字符串 
	reverse(s1.begin(),s1.end());
	reverse(s2.begin(),s2.end());
	// 循环遍历字符串
	for(int i=0;i<len1;i++){
		a[i] = s1[i] - '0'; 
	} 
	for(int i=0;i<len2;i++){
		b[i] = s2[i] - '0'; 
	}
	// 高精度乘法核心代码:  逐位相乘,  需要采用嵌套for 
	for(int i=0;i<len1;i++){
		for(int j = 0;j<len2;j++){
			c[i+j] = a[i] * b[j] + c[i+j]; // 相同 的乘积 累加 
		}
	} 
	//两位数 * 三位数 最多五位,最小四位。 只需要从0 循环到5就可以了 
	int len3 = len1+len2; 
	
	// 处理进位 
	for(int i=0;i<len3;i++){
		// 进位: 当前位 / 10的商  加到下一位上去 
		c[i+1] = c[i] / 10 + c[i+1] ;
		//当前位 = % 10 得到的个位 
		c[i] = c[i] % 10;
	}
	
	// 去除前导0
	while(len3 >1 && c[len3-1] == 0){
		len3--; 
	} 
	// 循环输出 
	for(int i = len3-1;i>=0;i--){
		cout << c[i];
	} 
	
	return 0;
}
相关推荐
牧瀬クリスだ14 分钟前
Redis Hash实战:高效存储对象与购物车
java·数据库·redis·算法·哈希算法
木井巳21 分钟前
【动态规划: 路径问题】下降路径最小和
java·算法·leetcode·动态规划·推荐算法
deepseek231 小时前
OpenAI三项科学发现拆解:3-SAT亚指数算法挑战ETH,AI科学声明的验证流水线怎么搭
人工智能·算法·openai
梦帮科技1 小时前
基于幺正李代数连续归一化流的混合量子生成模型 (HQNN-Flow) 完整技术指南(上部分)
网络·人工智能·算法·量子计算
青少儿编程课堂1 小时前
蓝桥杯青少组 + 全国青少年信息素养大赛 + 电子学会图形化考级|校园推箱子大挑战解析
c++·python·算法·bfs·信息学竞赛
荆棘鸟智能2 小时前
河道采砂船识别与轨迹追踪怎么做?检测、跟踪与电子围栏实战思路
人工智能·算法·目标检测
DFT计算杂谈3 小时前
GSAS-II X 射线衍射(XRD)数据转换为对分布函数(PDF,Pair Distribution Function)
算法·机器学习·pdf
绕灵儿3 小时前
火灾检测-应用场景-YOLO训练记录
人工智能·算法
YLCHUP3 小时前
【模拟&STL】题解:AT_abc203_e [ABC203E] White Pawn_基础算法_数据结构_STL模板库_AtcoderABC_C++算法竞赛
数据结构·c++·算法·leetcode·动态规划·哈希算法·近邻算法
(●—●)橘子……3 小时前
力扣 第525场周赛 练习理解
数据结构·python·学习·算法·leetcode