利用C语言实现大数加减法

 

大数加法:

#include 
#include 
#define M 100 //定义了数量M是100作为数组初始化的数量 

int main()
{
	int i, j, len_s1, len_s2;    // len_s1是字符数组s1的长度, len_s2是字符数组s2的长度,
	char s1[M], s2[M];
	int num1[M] = {0};           // 数字数组num1 
	int num2[M] = {0};           // 数字数组num2 
	scanf("%s %s", s1, s2);    
	
	len_s1 = strlen(s1);         //	求第一个加数的位数 
	len_s2 = strlen(s2);	     // 求第二个加数的位数 
	
	for(i=len_s1-1, j=0; i>=0; i--)   //将字符数组转化为数字数组,并倒数存放,作为第一个加数 
	{
		num1[j] = s1[i] - '0';
		j++;
	}
	for(i=len_s2-1, j=0; i>=0; i--)   //将字符数组转化为数字数组,并倒数存放,作为第二个加数 
	{
		num2[j] = s2[i] - '0';
		j++;
	}
	
	for(i=0; i<=M; i++)               //实现大数的加法 
	{
		num1[i] = num1[i]+num2[i];
		if(num1[i]>9)
		{
			num1[i] = num1[i]-10;
			num1[i+1]++; 	
		}	
	}
	
	for(i=M-1; i>=0&&num1[i]==0; i--);  //求得最终结果的位数 
	
	if(i>0)
	{
		for(; i>=0; i--)                    //最终答案的输出 
		{
			printf("%d", num1[i]);	
		}
	}
	else 
		printf("0");
	return 0;
}

大数减法:

#include 
#include 

//设置初始数组个数为100 
#define M 100

int main()
{
	char str_a[M], str_b[M];       // 字符数组的初始化 
	int num_a[M] = {0};            // 被减数数组 
	int num_b[M] = {0};            // 减数数组 
	int num_c[M];                  // 差值数组 
	int len_a, len_b;              // 被减数位数,减数位数 
	int i, j, k, n, f=0;
	
	scanf("%s %s", str_a, str_b);
	
	len_a = strlen(str_a);
	len_b = strlen(str_b);
	
	//K的值是参与运算的数据最大位数 
	if(len_a>len_b)
		k = len_a;
	else 
		k = len_b;	
	num_c[0] = 0;
		
	//n>0表示a>b, n<0表示a len_b)
		n = 1;
	else if(len_a == len_b)
		n = strcmp(str_a, str_b);
	else 
		n = -1;
		
	//字符数组倒序后位数对齐存在整数数组中 
	for(i=len_a-1, j=0; i>=0; i--, j++)
	{
		num_a[j] = str_a[i] - '0';	
	} 
	for(i=len_b-1, j=0; i>=0; i--, j++)
	{
		num_b[j] = str_b[i] - '0';	
	}	

	//具体执行减法运算 
	for(i=0; i=0)
		{
			if(num_a[i]-num_b[i] >= 0)
				num_c[i] = num_a[i] - num_b[i];
			else 
			{
				num_c[i] = num_a[i] + 10 - num_b[i];
				num_a[i+1]--;
			}
		}
		else 
		{
			if(num_b[i]-num_a[i] >= 0)
				num_c[i] = num_b[i] - num_a[i];
			else
			{
				num_c[i] = num_b[i] + 10 - num_a[i];
				num_b[i+1]--;
			}
		}
	}
	
	//最终结果的输出 
	if(n<0)
		printf("-");
	for(i=k-1; i>=0; i--)
	{
		if(num_c[i])
			f=1;
		if(f||i==0)
			printf("%d", num_c[i]);
	}
	printf("\n");
	return 0;
} 

 

你可能感兴趣的:(C语言二三事)