
4高精度乘法√
发布时间:
例1 :高精度x单精度
js
#include <bits/stdc++.h>
using namespace std;
int main() {
//第一步:定义一个string类型变量,一个int类型变量,两个int类型数组;
int a[256], c[256];
int x;
string s;
memset(a, 0, sizeof(a));
memset(c, 0, sizeof(c));
//读入两个高精度整数,存入字符串
cin>>s>>x;
//第二步:将高精度整数逆序存入a数组中;
for (int i=s.size()-1,j=1; i >=0; i--,j++) {
a[j] = s[i] - '0';
}
//用单精度乘以高精度的每一位
for (int i=1; i <=s.size(); i++) {
c[i] = a[i] * x;
}
//逐位进位
for (int i =1; i<= s.size() ; i ++) {
if (c[i]>10) {
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
//计算单精度位数
int temp=x;
int len=s.size();
while(temp!=0){
temp/=10;
len++;
}
//位数长度去掉最高位去掉0位
while(len>1&&c[len]==0){
len--;
}
//第四步:逆序输出结果
for (int i=len; i>=1; i--) {
cout<<c[i];
}
return 0;
}
例2 :高精度x高精度
js
#include <bits/stdc++.h>
using namespace std;
int main() {
int a[101]={2,8,8};
int b[101]={2,8,8};
int c[101]={0};
for (int i = 1; i <= a[0]; i++) {
for (int j = 1; j <=b[0]; j++) {
c[i + j - 1] += (a[i] * b[j] );
}
}
int len =a[0]+b[0]-1;
//逐位进位
for (int i =1; i<= len ; i ++) {
if (c[i]>10) {
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
//位数长度去掉最高位去掉0位
while(len >1&&c[len ]==0){
len --;
}
//第四步:逆序输出结果
for (int i=len; i>=1; i--) {
cout<<c[i];
}
cout << endl;
return 0;
}