高精汇总1(没有高精除法)

本文介绍了一种使用C++实现的大数运算方法,包括加法、减法、乘法及部分除法运算。通过字符串输入处理大整数,适用于超出基本数据类型范围的计算场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<bits/stdc++.h>
using namespace std;
const int N=10000+5;
int a[N],b[N],c[N],x,g;
string s1,s2;
void init1(){
	cin>>s1;cin>>s2;
	a[0]=s1.size();b[0]=s2.size();
	for(int i=1;i<=a[0];i++)
	    a[i]=s1[a[0]-i]-'0';
	for(int i=1;i<=b[0];i++)
	    b[i]=s2[b[0]-i]-'0';
}
void init2(){
	cin>>s1;cin>>g;
	a[0]=s1.size();b[0]=s2.size();
	for(int i=1;i<=a[0];i++)
	    a[i]=s1[a[0]-i]-'0';
}
void mem(int len,int c[]){
	for(int i=1;i<=len;i++)
	    c[i]=0;
}
void none_zero_print(){
	while(c[0]>1 && c[c[0]]==0) c[0]--;
	for(int i=c[0];i>=1;i--)
	    cout<<c[i];
	cout<<endl;
}
int Bignum_sum(int a[],int b[],int c[]){         //高精加
	memset(c,0,sizeof(c));
	c[0]=max(a[0],b[0])+1;
	for(int i=1;i<=c[0];i++){
		if(i<=a[0]) c[i]+=a[i];
		if(i<=b[0]) c[i]+=b[i];
		c[i+1]=c[i]/10;//进位过程
		c[i]=c[i]%10;
	}
	none_zero_print();
}//AC
int Bignum_subtract(int a[],int b[],int c[]){    //高精减
	memset(c,0,sizeof(c));
	c[0]=max(a[0],b[0])+1;
	for(int i=1;i<=c[0];i++){
		if(i<=a[0]) c[i]+=a[i];
		if(i<=b[0]) c[i]-=b[i];
		if(c[i]<0){
			c[i]+=10;
			c[i+1]--;
		}
	}
	none_zero_print();
}//AC
void Bignum_multiply(int a[],int b[],int c[]){   //高精乘
	c[0]=a[0]+b[0]+1;
	mem(4*c[0],c);
	for(int i=1;i<=a[0];i++){
		for(int j=1;j<=b[0];j++){
			c[i+j-1]+=a[i]*b[j];
			c[i+j]+=c[i+j-1]/10;    //将进位的数存入i+j-1位(竖式规律)
			c[i+j-1]%=10;
		}
	}
	none_zero_print();
}//AC;
void Bignum_high_divide_low(int a[],int c[]){    //高精除以低精
	c[0]=a[0];
	mem(4*c[0],c);
	for(int i=a[0];i>=1;i--){
		x=x*10+a[i];    //g表示除数
		c[i]=x/g;
		x%=g;
	}
	none_zero_print();
	cout<<x;  //输出余数
}//not finished;
int cmp(int a[],int b[]){
	if(a[0]>b[0]) return 1;
	if(a[0]<b[0]) return 0;
	for(int i=1;i<=a[0];i++)
	    if(a[i]!=b[i])
	        return a[i]>b[i]; //a[i]>b[i] --> 1 else a[i]<b[i] --> 0
	return -1;  //其他情况
}
void cmp_print(){
	if(cmp(a,b)==1)
	    cout<<s1<<">"<<s2;
	else if(cmp(a,b)==0)
	    cout<<s1<<"<"<<s2;
		else
		    cout<<s1<<"="<<s2;
}
int main(){
	ios::sync_with_stdio(false);
    //init1(); // for the following three function;
	//init2(); // for : Bignum_high_divide_low(a,b,c);
	//Bignum_sum(a,b,c);
	//Bignum_subtract(a,b,c);
	//Bignum_multiply(a,b,c);
	//Bignum_high_divide_low(a,c);
	//cmp_print();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值