c++高精度计算-大整数相乘

例题-信奥赛1307:

【例1.3】高精度乘法

题目描述:

输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。

输入:

输入两个高精度正整数M和N。

输出:

求这两个高精度数的积。

输入样例:

36

3

输出样例:

108 

做题思路:

学习乘法的朋友大概对加减法都有一定的了解,我就不多赘述了,如果不知道也没关系,我的主页可以找到。乘法和加减法最大的不同,就是不只是对应位置上做数学运算,是各个位数与另一数字的各个位数都要相乘,这就需要运用双重循环,实现m个数字乘n个数字。

举个例子:

具体代码如下:

#include <bits/stdc++.h>
using namespace std;
int main(){
    char m[100],n[100];
    int a[100]={0},b[100]={0},c[10000]={0};
    scanf("%s%s",m,n);
    int lm=strlen(m);
    int ln=strlen(n);
    for(int i=0;i<lm;i++){
    	a[lm-1-i]=m[i]-'0';//将字符数组m倒置赋给整型数组a 
	}
	for(int i=0;i<ln;i++){
    	b[ln-1-i]=n[i]-'0';//将字符数组n倒置赋给整型数组b 
	}
	for(int i=0;i<lm;i++){
		int t=0;//用于存储进位 
		for(int j=0;j<ln;j++){
			int s=a[i]*b[j]+t+c[i+j];//当前乘积+上次乘积进位+该位置原数 
			t=s/10;
			c[i+j]=s%10;
		}
		c[i+ln]=t;//每轮循环最后进位 
	}
	int l=lm+ln+1;
	while(c[l]==0&&l>0){
		l--;//删除前导0 
	}
	for(int i=l;i>=0;i--){
		printf("%d",c[i]);//倒序输出 
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值