Skip to content
本页目录

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;
}

   

上次更新: