c语言实现大数的加法与比较

当数的范围超出long long int的范围时,如果要进行比较和加减我们就要用到大数

大数的比较和加法

大数的加法

因为大数超出了long long int的范围,我们可以用两个字符数组来存放大数,然后模拟人工运算(从最后一位开始,相加然后进位),下面给出代码

#include<stdio.h>
#include<string.h>
int main()
{
	char a[10000],b[10000],q;    //用两个字符数组来存放数据
	scanf("%s",a);				//输入两串数字
	scanf("%s",b);
	int i,j,n,m;
	m=strlen(a);				
	n=strlen(b);
	if(m<=n)	
	{	
		for(i=n+1,j=m;j>=0;j--,i--)		//要进行加法,先要在短的那串数字前面补0,让两串数据等长
		{								
			a[i]=a[j];
		}
		for(i=0;i<=n-m;i++)
		{
			a[i]='0';
		}
		for(i=n;i>=0;i--)				//两个数相加,须让长的数据前多一个0来存放可能的进位
		{
			b[i]=b[i-1];
		}
		b[0]='0';				
		
	}
	else
	{
		for(i=m+1,j=n;j>=0;j--,i--)
		{
			b[i]=b[j];
		}
		for(i=0;i<=m-n;i++)
		{
			b[i]='0';
		}
		for(i=m;i>=0;i--)
		{
			a[i]=a[i-1];
		}
		a[0]='0';
		n=m;			//让n=最长的字符串长度
	}
	q=0;				//初始化用来统计进位的变量q
	for(i=n;i>=0;i--)
	{
		m=a[i]+b[i]-'0'-'0'+q;			//因为是以字符串形式来存放,减去‘0’后才是要运算的数字
		a[i]=m%10+'0';
		q=m/10;		
	}
	if(a[0]!='0')						//去除可能的前导0
	printf("%c",a[0]);
	for(i=1;i<=n;i++)
	{
		printf("%c",a[i]);
	}
	return 0;
}

输入
9999999999999999999999
9999999999999999999999
运行结果:
结果

大数的比较

要比较两个大数,可以先比较位数,位数大的数字一定大。如果位数相同则从最高位开始比较。
下面是代码(输出较大的数):

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int bj(char *,char *);
int main()
{
    int i,n,q,w=1;

    char a[10000];      //同样用两个字符数组存放数字
    char b[10000];
    scanf("%s",a);
    scanf("%s",b);
    q=bj(a,b);			
    if(q)
    {
	 	 strcpy(a,b);			//如果b>a,把b复制给a
	}   
    printf("%s",a); 
    return 0;
}
int bj(char *x,char *y)		//如果a>b返回0,否则返回1
{
    int a,b,i;
    a=strlen(x);
    b=strlen(y);
    if(a>b)
	 return 0;
    if(a<b) 					
	return 1;
    if(a==b)
    {
        for(i=0;i<a;i++)
        {
            if(x[i]>y[i])						
            return 0;
            else if(x[i]==y[i])
            continue;
            else
            return 1;
        }
    }
    return 0;
}

输入
9999999999999999999999999999999999999999999999999999999999999999999988
9999999999999999999999999999999999999999999999999999999999999999999987
运行结果:结果

发布了9 篇原创文章 · 获赞 3 · 访问量 711

猜你喜欢

转载自blog.csdn.net/qq_22156483/article/details/103585524