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

大数运算总结

发布时间:2020-12-14 05:02:25 所属栏目:大数据 来源:网络整理
导读:①大数加法 #includestdio.h#includestring.hchar a[10001],b[10001],c[10001];int main(){int m,n,i,j,k;scanf("%s%s",a,b);m=strlen(a);n=strlen(b);if(m=n){j=n-1;for(i=m-1;i=m-n;i--){a[i]+=b[j]-48;j--;}for(i=m-1;i0;i--) if(a[i]'9') {a[i]-=10;a[i-

①大数加法

#include<stdio.h>
#include<string.h>
char a[10001],b[10001],c[10001];
int main()
{
	int m,n,i,j,k;
	scanf("%s%s",a,b);
	m=strlen(a);
	n=strlen(b);
	if(m>=n)
	{
		j=n-1;
		for(i=m-1;i>=m-n;i--)
		{
			a[i]+=b[j]-48;
			j--;
		}
		for(i=m-1;i>0;i--)
		 if(a[i]>'9')
		 {
			a[i]-=10;
			a[i-1]+=1;
		 }
		 if(a[0]>'9')
		{
			for(i=m;i>0;i--)
				a[i]=a[i-1];
			a[1]-=10;
			a[0]='1';
		}
		printf("%sn",a);
	}
	else
	{
		j=m-1;
		for(i=n-1;i>=n-m;i--)
		{
			b[i]+=a[j]-48;
			j--;
		}
		for(i=n-1;i>0;i--)
		 if(b[i]>'9')
		 {
			b[i]-=10;
			b[i-1]+=1;
		 }
		if(b[0]>'9')
		{
			for(i=n;i>0;i--)
				b[i]=b[i-1];
			b[1]-=10;
			b[0]='1';
		}
		printf("%sn",b);
	}
	return 0;
}


②大数加法2

#include<stdio.h>
#include<string.h>
int main()
{
	char a[10001],sum[100002];
	int m,x,j;
	while(scanf("%d",&x)!=EOF)
	{
		for(j=1;j<=x;j++)
		{
			memset(a,sizeof(a));
			memset(b,sizeof(b));
			memset(sum,sizeof(sum));
			scanf("%s%s",b);
			if(strlen(b)>strlen(a))
			{
				m=strlen(b)-1;
				n=strlen(a)-1;
			}
			else
			{
				m=strlen(a)-1;
				n=strlen(b)-1;
			}
			scanf("%s%s",b);
			if(strlen(b)>strlen(a))
			{
				m=strlen(b)-1;
				n=strlen(a)-1;
			}
			else
			{
				m=strlen(a)-1;
				n=strlen(b)-1;
			}
			if(strlen(a)>strlen(b))
				for(i=m-n-1;i>=0;i--)
					sum[i]=a[i];
			else
				for(i=m-n-1;i>=0;i--)
					sum[i]=b[i];
			for(i=m;i>=1;i--)
				if(sum[i]>'9')
				{
					sum[i]-=10;
					sum[i-1]+=1;
				}
				if(sum[0]>'9')
				{
					sum[0]-=10;
					printf("Case %d:n",j);
					printf("%s + %s = 1%sn",b,sum);
				}
				else
				{
					printf("Case %d:n",j);
					printf("%s + %s = %sn",sum);
				}
				if(j!=x)
					printf("n");
		}
	}
}

?

③大数相加(小数)

#include<stdio.h>
#include<string.h>
int main()
{
	char a[400],b[400],sum1[401],sum2[402];
	int m,y,j;
	while(scanf("%s%s",b)!=EOF)
	{
		memset(sum1,sizeof(sum1));
		memset(sum2,sizeof(sum2));
		m=strlen(a);
		n=strlen(b);
		for(i=0;a[i]!='.'&&a[i]!=0;i++)
			x=i;
		for(i=0;b[i]!='.'&&b[i]!=0;i++)
			y=i;
	if(y>x)
	{
		j=x;
		for(i=0;i<=y;i++)
			sum1[i]=b[i];
		for(i=y;j>=0;i--)
		{
			sum1[i]+=a[j]-48;
			j--;
		}
	}
	else
	{
		j=y;
		for(i=0;i<=x;i++)
			sum1[i]=a[i];
		for(i=x;j>=0;i--)
		{
			sum1[i]+=b[j]-48;
			j--;
		}
	}
	if(m-x<n-y)
	{
		j=x+2;
		for(i=y+2;i<n;i++)
			sum2[i-y-2]=b[i];
		for(i=y+2;j<m;i++)
		{
			sum2[i-y-2]+=a[j]-48;
			j++;
		}
	}
	else
	{
		j=y+2;
		for(i=x+2;i<m;i++)
			sum2[i-x-2]=a[i];
		for(i=x+2;j<n;i++)
		{
			sum2[i-x-2]+=b[j]-48;
			j++;
		}
	}
	for(i=(m-x-2)<(n-y-2)?(m-x-2):(n-y-2);i>0;i--)
		if(sum2[i]>'9')
		{
			sum2[i]-=10;
			sum2[i-1]+=1;
		}
		if(sum2[0]>'9')
		{
			sum2[0]-=10;
			sum1[x>y?x:y]+=1;
		}
		for(i=x>y?x:y;i>0;i--)
		if(sum1[i]>'9')
		{
			sum1[i]-=10;
			sum1[i-1]+=1;
		}
	if(sum1[0]>'9')
	{
		sum1[0]-=10;
		printf("1%s",sum1);
	}
	else
		printf("%s",sum1);
	for(i=strlen(sum2)-1;i>=0;i--)
	{
		if(sum2[i]=='0')
			sum2[i]=0;
		else
			break;
		
	}
	if(sum2[0]<='9'&&sum2[0]>='0')
		printf(".%sn",sum2);
	else
		printf("n");
	memset(a,sizeof(a));
	memset(b,sizeof(b));
	}
	return 0;
}


④大数乘法

#include<stdio.h>
#include<string.h>
#define max 10000
int main()
{
	char a[100]={0},b[100]={0},t[100]={0},sum[max]={0};
	int i,k,l,la,lb;
	while(~scanf("%s%s",b))
	{
		k=0;
		la=strlen(a);
		lb=strlen(b);
		for(j=lb-1;j>=0;j--)
			b[j]-=48;
		for(j=la-1;j>=0;j--)
			a[j]-=48;
		for(j=lb-1;j>=0;j--)
		{
			for(i=la-1;i>=0;i--)
			{
				t[i+1]=a[i]*b[j];
			}
			for(i=la;i>0;i--)
			{
				if(t[i]>9)
				{
					t[i-1]+=t[i]/10;
					t[i]%=10;
				}
			}
			for(i=la+lb-k,l=la;l>=0;i--,l--)
				sum[i]+=t[l];
			for(i=la+lb;i>=1;i--)
			{
				if(sum[i]>9)
				{
				sum[i-1]+=sum[i]/10;
				sum[i]%=10;
				}
			}
			memset(t,sizeof(t));
			k++;
		}
		sum[la+lb+1]=0;
		for(i=la+lb;i>=0;i--)
			sum[i]+=48;
		k=strlen(sum);
		for(i=0;sum[i]==48;i++)
		{
		}
		for(j=0;sum[j+i]!=0;j++)
			sum[j]=sum[j+i];
		sum[k-i]=0;
		printf("%sn",sum);
		memset(a,sizeof(a));
		memset(b,sizeof(b));
		memset(t,sizeof(t));
		memset(sum,sizeof(sum));
	}
}


⑤大数乘法2

#include<stdio.h>  
#include<string.h>  
#define MAX 10005  
int main()  
{  
    int n,t,s;  
    char a[102],b[102],temp[105]={0},sum[MAX]={0};  
    int lena,lenb,flag,m=0;  
    scanf("%d",&n);  
    while(n--)  
    {
     m++;  
     flag=0;  
     scanf("%s%s",b);  
     lena=strlen(a);  
     lenb=strlen(b);  
     for(j=lenb-1;j>=0;j--)  
        {
		 for(t=lena,i=lena-1;i>=0;i--,t--)  
            {
			 temp[t]=(a[i]-48)*(b[j]-48);  
            }  
            for(t=lena;t>=1;t--)  
            {  
                if(temp[t]>9)  
                {
			temp[t-1]+=temp[t]/10;  
			temp[t]%=10;  
                }  
            }  
            for(s=lena+lenb-flag,t=lena;t>=0;t--,s--)  
                sum[s]+=temp[t];  
            for(t=lena;t>=0;t--)  
                temp[t]=0;  
            for(s=lena+lenb;s>=1;s--)  
            {  
                if(sum[s]>9)  
                {
					sum[s-1]+=sum[s]/10;  
					sum[s]%=10;  
                }
			}  
            flag++;  
        }  
        sum[lena+lenb+1]='/0';  
        for(s=0;s<=lena+lenb;s++)  
                sum[s]=sum[s]+48;  
        for(s=0;s<lena+lenb;s++)
		{
            if(sum[0]==0x30)  
            {  
                for(t=0;t<=lena+lenb-s;t++)  
                sum[t]=sum[t+1];  
             }  
             else 
				 break;
		}
                printf("Case %d:n",m);  
        printf("%s * %s = %sn",sum);  
        if(n!=0)  
            printf("n");  
            for(s=lena+lenb+1;s>=0;s--)  
            sum[s]=0;
	}  
    return 0;  
}

(编辑:李大同)

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

    推荐文章
      热点阅读