1. 程式人生 > >利用C語言實現大數加減法

利用C語言實現大數加減法

大數加法:

#include <stdio.h>
#include <string.h>
#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 <stdio.h>
#include <string.h>

//設定初始陣列個數為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<b, n=0表示a=b 
	if(len_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<k; i++)
	{
		if(n>=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;
}