zoukankan      html  css  js  c++  java
  • 大数基本运算

    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],b[1000],s[10000];
    void sub(char a[],char b[],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,b,s);
    	cout<<s<<endl;
    	return 0;
    }
    


    3、大数乘法

    #include <iostream>
    #include <string>
    using namespace std;
    char a[1000],b[1000],s[10000];
    void mult(char a[],char b[],char s[])     //a被乘数,b乘数,s为积
    {
        int i,j,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,b,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为余数
    }
    





  • 相关阅读:
    查看内置命令和非内置命令帮助的几种方法(man、help、info)
    手写js的insertAfter
    Java 单链表简单实现
    StudentMain控屏后如何关闭
    python3 twisted问题
    python3 you-get
    数据库方言(这是啥玩意儿?)
    vi/vim用法
    sublime text3
    数据库命令大全(也不是很全哈)
  • 原文地址:https://www.cnblogs.com/zswbky/p/5431941.html
Copyright © 2011-2022 走看看