大数模板

大数加法:来自

string sum(string s1,string s2)//大数加法 
{
	if(s1.size()<s2.size())
	{
		string t=s1;s1=s2;s2=t;
	}//始终保持s1更长 
	int i,j;
	for(i=s1.size()-1,j=s2.size()-1;i>=0;i--,j--)
	{
		s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));   //注意细节
		if(s1[i]-'0'>=10)//如果需要进位 
		{
			s1[i]=char((s1[i]-'0')%10+'0');
			if(i) s1[i-1]++;//只要没有到零就进一位 
			else s1='1'+s1;//如果到了零,这样处理 
		}
	}
	return s1;
}

大数减法:来自

string sub(string a,string b)
{
    string c;
    bool ok=0;
    int len1=a.length();
    int len2=b.length();
    int len=max(len1,len2);
    for(int i=len1;i<len;i++)
        a="0"+a;
    for(int i=len2;i<len;i++)
        b="0"+b;
    if(a<b)
    {
        string temp=a;
        a=b;
        b=temp;
        ok=1;
    }
    for(int i=len-1;i>=0;i--)
    {
        if(a[i]<b[i]) 
        {
            a[i-1]-=1;
            a[i]+=10;
        }
        char temp=a[i]-b[i]+'0';
        c=temp+c;
    }
    int pos=0;
    while(c[pos]=='0' && pos<len) pos++;
    if(pos==len) return "0"; 
    if(ok) return "-"+c.substr(pos);
    return c.substr(pos);
}

大数乘法:

#include<cstdio>
#include<cstring>
using namespace std;
char s1[1011],s2[1011];
int len1,len2,a[1011],b[1011],c[2011];
int main()
{
    scanf("%s%s",s1,s2);
    len1=strlen(s1);len2=strlen(s2);
    int x=0,y=0;
    for(int i=len1-1;i>=0;i--) a[++x]=s1[i]-'0';a[0]=x;
    for(int i=len2-1;i>=0;i--) b[++y]=s2[i]-'0';b[0]=y;
    for(int i=1;i<=a[0];i++)
     for(int j=1;j<=b[0];j++)
      {
           c[i+j]+=(c[i+j-1]+a[i]*b[j])/10;
         c[i+j-1]=(c[i+j-1]+a[i]*b[j])%10;
      }
    c[0]=a[0]+b[0];
    while(!c[c[0]]&&c[0]>1) c[0]--;
    for(int i=c[0];i;i--) printf("%d",c[i]);
}

大数除法:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值