加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数基本运算

发布时间:2020-12-14 02:36:01 所属栏目:大数据 来源:网络整理
导读:1、大数加法 #include iostream#include stringusing namespace std;char a[1000],b[1000],s[10000];void add(char a[],char b[],char s[])//a被加数,b加数,s和{ int i,j,k,up,x,y,z,l; char *c; if (strlen(a)strlen(b)) l=strlen(a)+2; else l=strlen(b)

1、大数加法

#include <iostream>
#include <string>
using namespace std;
char a[1000],b[1000],s[10000];
void add(char a[],char b[],char s[])//a被加数,b加数,s和
{
    int i,j,k,up,x,y,z,l;
    char *c;
    if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
    c=(char *) malloc(l*sizeof(char));
    i=strlen(a)-1;
    j=strlen(b)-1;
    k=0;up=0;
    while(i>=0||j>=0)
	{
		if(i<0) x='0'; else x=a[i];
		if(j<0) y='0'; else y=b[j];
		z=x-'0'+y-'0';
		if(up) z+=1;
		if(z>9) {up=1;z%=10;} else up=0;
		c[k++]=z+'0';
		i--;j--;
	}
    if(up) c[k++]='1';
    i=0;
    c[k]='';
    for(k-=1;k>=0;k--)
        s[i++]=c[k];
    s[i]='';
} 
int main()
{
	cin>>a>>b;
	add(a,b,s);
	cout<<s<<endl;
	return 0;
}

2、大数减法
#include <iostream>
using namespace std;
char a[1000],s[10000];
void sub(char a[],char s[])
{
    int i,l2,l1,k;
    l2=strlen(b);l1=strlen(a);
    s[l1]='';l1--;
    for (i=l2-1;i>=0;i--,l1--)
        {
        if (a[l1]-b[i]>=0) 
            s[l1]=a[l1]-b[i]+'0';
        else
            {
            s[l1]=10+a[l1]-b[i]+'0';
            a[l1-1]=b[l1-1]-1;
            }
        }
    k=l1;
    while(a[k]<0) {a[k]+=10;a[k-1]-=1;k--;}
    while(l1>=0) {s[l1]=a[l1];l1--;}
loop:
    if (s[0]=='0') 
        {
        l1=strlen(a);
        for (i=0;i<l1-1;i++) s[i]=s[i+1];
        s[l1-1]='';
        goto loop;
        }
    if (strlen(s)==0) {s[0]='0';s[1]='';}
} 

int main()
{
	cin>>a>>b;
	sub(a,s);
	cout<<s<<endl;
	return 0;
}


3、大数乘法

#include <iostream>
#include <string>
using namespace std;
char a[1000],s[10000];
void mult(char a[],char s[])     //a被乘数,b乘数,s为积
{
    int i,k=0,alen,blen,sum=0,res[65][65]={0},flag=0;
    char result[65];
alen=strlen(a);
blen=strlen(b); 
    for (i=0;i<alen;i++)
for (j=0;j<blen;j++) 
res[i][j]=(a[i]-'0')*(b[j]-'0');
    for (i=alen-1;i>=0;i--)
        {
            for (j=blen-1;j>=0;j--) sum=sum+res[i+blen-j-1][j];
            result[k]=sum%10;
            k=k+1;
            sum=sum/10;
        }
    for (i=blen-2;i>=0;i--)
        {
            for (j=0;j<=i;j++) sum=sum+res[i-j][j];
            result[k]=sum%10;
            k=k+1;
            sum=sum/10;
        }
    if (sum!=0) {result[k]=sum;k=k+1;}
    for (i=0;i<k;i++) result[i]+='0';
    for (i=k-1;i>=0;i--) s[i]=result[k-1-i];
    s[k]='';
    while(1)
        {
        if (strlen(s)!=strlen(a)&&s[0]=='0') 
            strcpy(s,s+1);
        else
            break;
        }
}
int main()
{
	cin>>a>>b;
	mult(a,s);
	cout<<s<<endl;
	return 0;
}

4、大数取余

int mod(int B)     //A为大数,B为小数
{
	int i = 0,r = 0;
	while( A[i] != '' )
	   r=(r*10+A[i++]-'0')%B;
    return r ;    //r为余数
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读