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]);//倒序输出
}
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)