高精度练习之乘法:
问题描述(Description):给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。
输入描述(Input Description):读入两个用空格隔开的正整数
输出描述(Output Description):A*B的值
/*
高精度乘法
*/
#include<iostream>
#include<string.h>
using namespace std;
int muilt_num(int a[],int b[],int c[],int n1,int n2){
for(int i=0;i<=n1-1;i++){//看上面的图
for(int j=0;j<=n2-1;j++){
c[i+j]+=a[i]*b[j];
}
}
for(int i=0;i<n1+n2;i++){//一次性进位操作
if(c[i]>=10){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
}
void printNum(int c[],int n1,int n2){//打印输出
int i=n1+n2;
while(c[i]==0){//去掉前导0
i--;
}
for(;i>=0;i--){
cout<<c[i];
}
}
int main(){
int a[500]={0};
int b[500]={0};
int c[500]={0};
int n1,n2;
string s1,s2;
cin>>s1>>s2;//输入两个字符串数据
n1=s1.length();
n2=s2.length();
for(int i=0;i<n1;i++){
a[i]=s1[n1-i-1]-'0';//字符数据变为整型数据
}
for(int j=0;j<n2;j++){//同上
b[j]=s2[n2-j-1]-'0';
}
muilt_num(a,b,c,n1,n2);//乘
printNum(c,n1,n2);//输出
return 0;
}