高精度计算

【高精加】

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[510],la,b[510],lb,c[510];
int main()
{
	int x=0; char ch=getchar();
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while(ch>='0'&&ch<='9') a[++la]=ch-'0',c[la]=a[la],ch=getchar();
	for(int i=la;i;i--) a[i]=c[la-i+1];
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while(ch>='0'&&ch<='9') b[++lb]=ch-'0',c[lb]=b[lb],ch=getchar();
	for(int i=lb;i;i--) b[i]=c[lb-i+1];
	int len=max(la,lb);
	memset(c,0,sizeof(c));
	for(int i=1;i<=len;++i)
	 c[i]+=a[i]+b[i],c[i+1]+=c[i]/10,c[i]%=10;
	while(c[len]>=10) c[len+1]=c[len]/10,c[len]%=10,len++;
	while(!c[len]) len--;
	for(int i=len;i>0;--i) printf("%d",c[i]);
	return 0;
}

【高精减】

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[510],b[510],c[510],la,lb,len;
inline void jian(int a[],int b[])
{
	for(int i=1;i<=len;++i)
	 if(a[i]>=b[i]) c[i]+=a[i]-b[i];
	  else a[i+1]-=1,c[i]+=a[i]+10-b[i];
	while(!c[len]) len--;
}
int main()
{
	int x; char ch=getchar();
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while(ch>='0'&&ch<='9') a[++la]=ch-'0',c[la]=a[la],ch=getchar();
	for(int i=la;i;i--) a[i]=c[la-i+1];
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while((ch>='0'&&ch<='9')) b[++lb]=ch-'0',c[lb]=b[lb],ch=getchar();
	for(int i=lb;i;i--) b[i]=c[lb-i+1];
	memset(c,0,sizeof(c)); 
	len=max(la,lb);
	if(la<lb) jian(b,a),printf("-");
	 else jian(a,b);
	for(int i=len;i;i--) printf("%d",c[i]);
	return 0; 
 } 

【高精乘】

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[510],b[510],c[510],la,lb,len;
int main()
{
	int x; char ch=getchar();
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while(ch>='0'&&ch<='9') a[++la]=ch-'0',c[la]=a[la],ch=getchar();
	for(int i=la;i;i--) a[i]=c[la-i+1];
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while(ch>='0'&&ch<='9') b[++lb]=ch-'0',c[lb]=b[lb],ch=getchar();
	for(int i=lb;i;i--) b[i]=c[lb-i+1];
	memset(c,0,sizeof(c));
	for(int i=1;i<=la;++i)
	 for(int j=1;j<=lb;++j)
	  c[i+j-1]+=a[i]*b[j],c[i+j]+=c[i+j-1]/10,c[i+j-1]%=10;
	len=la+lb;
	while(c[len]>=10) c[len+1]=c[len]/10,c[len]%=10,len++;
	while(!c[len]) len--;
	for(int i=len;i;i--) printf("%d",c[i]);
	return 0;  
 } 


【高精除】

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[510],b[510],c[510];
inline int check(int a[],int b[])
{
	if(a[0]<b[0]) return -1;
	if(a[0]>b[0]) return 1;
	for(int i=a[0];i;i--)
	 {
	 	if(a[i]>b[i]) return 1;
	 	if(a[i]<b[i]) return -1;
	 }
	return 0;
}
inline void copy(int b[],int tmp[],int len)
{
	for(int i=1;i<=b[0];i++) tmp[i+len-1]=b[i];
	tmp[0]=b[0]+len-1; 
}
inline void solve(int a[],int b[])
{
	int t=check(a,b);
	if(!t) {a[0]=0; return;}
	if(t)
	 {
	 	for(int i=1;i<=a[0];i++)
	 	 if(a[i]<b[i]) a[i+1]-=1,a[i]+=10,a[i]-=b[i];
	 	  else a[i]-=b[i];
	 }
	while(a[0]&&!a[a[0]]) a[0]--;
}
inline void gaochu(int a[],int b[],int c[])
{
	int tmp[510];
	c[0]=a[0]-b[0]+1;
	for(int i=c[0];i;i--)
	 {
	 	memset(tmp,0,sizeof(tmp));
	 	copy(b,tmp,i);
	 	while(check(a,tmp)>=0) c[i]++,solve(a,tmp);
	 }
	while(c[0]&&!c[c[0]]) c[0]--;
}
int main()
{
	char ch=getchar();
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while(ch>='0'&&ch<='9') a[++a[0]]=ch-'0',c[a[0]]=a[a[0]],ch=getchar();
	for(int i=a[0];i;i--) a[i]=c[a[0]-i+1]; 
	while(!(ch>='0'&&ch<='9')) ch=getchar();
	while(ch>='0'&&ch<='9') b[++b[0]]=ch-'0',c[b[0]]=b[b[0]],ch=getchar();
	for(int i=b[0];i;i--) b[b[0]-i+1]=c[i]; 
	memset(c,0,sizeof(c));
	if(b[0]==1&&!b[1]) return 0;
	gaochu(a,b,c);
	for(int i=c[0];i;i--) printf("%d",c[i]);
	return 0;
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值