高精度数相加,俗称大整数相加

#include <stdio.h>
#include <string.h>
/*
高精度大数相加,未判断输入负数情况  位数(1000以内)  
*/ 
int main()
{
	char a[1000],b[1000];
	int c[1002]={0};
	int n[1000]={0},m[1000]={0};//这三个数组必须初始化为0; 
	int p=0;
	int i,j,k=0;
	scanf ("%s%s",a,b);
	if (a[0]=='0'&&b[0]=='0')
	{printf ("0");	//判断输入为0时 
	return 0;} 
	else
	{
	int x=strlen(a),y=strlen(b);//计算输入的数字长度 
	
	for (i=0,j=x-1;i<x;i++,j--)
	n[i]=a[j]-'0';
	for (i=0,j=y-1;i<y;i++,j--)
	m[i]=b[j]-'0';//逆序排序 
	
	
	k=x>y?x:y; //判断输入的那个位数长 
	
	for (i=0;i<=k;i++)//进位处理 ,相比于i<=2000,优化效率 
	{
		c[i]+=n[i]+m[i];
		if (c[i]>=10)
	{
		c[i+1]++;
		c[i]%=10;
	}	
	}
	
	for (j =1001;; j--) //去除未用到的位,即去 0 
        if (c[j] != 0)
        
		{
		p=j;
		break;
	}
    
    for (i = p; i >= 0; i--) 
    printf("%d", c[i]);//逆序输出 
    printf("\n");
    return 0;
}
}

猜你喜欢

转载自blog.csdn.net/petterp/article/details/80287767
今日推荐