基础算法6——高精度算法 加减乘除 C语言

A 高精度加法

#include
#include
​
const int N = 1e5 + 9;
int a[N], b[N], c[N];
char A[N], B[N];
​
void addition(int a[],int b[],int len_a,int len_b)
{
     int i,t=0,j;
     for (i = 0; i < len_a || i < len_b; i++)//c[0]存个位
     {
          if (i < len_a)t += a[i];
          if (i < len_b)t += b[i];
          c[i] = t % 10;
          t /= 10;
     }
     if (t > 0)
     {
          c[i] = t;
     }
     else
     {
          i--;
     }
     for (j = i; j>=0; j--)
     {
          printf("%d", c[j]);
     }
}
​
int main()
{
     gets_s(A);
     gets_s(B);
     int i,k=0, len_a = strlen(A), len_b = strlen(B);
     //先换为整数型,注:a[0]是个位,A[0]是最高位,∴A[k]需从最高位倒着存入a[i]
     for (i = 0,k=len_a-1; k>=0; k--,i++)a[i] = A[k] - '0';
     for (i = 0,k=len_b-1; k>=0; k--,i++)b[i] = B[k] - '0';
​
     addition(a, b, len_a, len_b);
     return 0;
}
​

B 高精度减法

#include
#include
​
const int N = 1e5 + 9;
char A[N], B[N];
int a[N], b[N], c[N];
​
int compare(char A[], char B[])//A[]大,返回1
{
     if (strlen(A) > strlen(B))
     {
          return 1;
     }
     else if (strlen(A) < strlen(B))
     {
          return 0;
     }
     else
     {
          if (strcmp(A, B) >= 0)
          {
               return 1;
          }
          else
          {
               return 0;
          }
     }
}
​
void subtraction(int a[],int b[],int len_a,int len_b)//默认a[]>b[]
{
     int i, j,t=0;
     for (i = 0; i < len_a; i++)
     {
          t += a[i];
          if (i < len_b)t -= b[i];
          if (t < 0)
          {
               t += 10;
               c[i] = t % 10;
               t = -1;
          }
          else
          {
               c[i] = t % 10;
               t = 0;
          }
     }
     while (c[--i] == 0&&i>0){}
     for (j = i; j >= 0; j--)
     {
          printf("%d", c[j]);
     }
}
​
int main()
{
     gets_s(A);
     gets_s(B);
     int i,k, len_a = strlen(A), len_b = strlen(B);
​
     for (i = len_a - 1, k = 0; i >= 0; k++, i--)a[k] = A[i] - '0';
     for (i = len_b - 1, k = 0; i >= 0; k++, i--)b[k] = B[i] - '0';
​
     if(compare(A,B)==1)
     {
          subtraction(a, b, len_a, len_b);
     }
     else if(compare(A,B)==0)
     {
          printf("-");
          subtraction(b, a, len_b, len_a);
     }
     return 0;
}

C 高精度乘法  

//数值范围:1
#include

const int N = 1e5 + 9;
char A[N];
int a[N], b, c[2*N];

void multiplication(int a[], int b, int len_a)
{
	int i, t = 0,k=0;
	if (b == 0)
	{
		printf("0");
		return;
	}
	for (i =0; i=0; i--)
	{
		printf("%d", c[i]);
	}
}

int main()
{
	gets_s(A);
	scanf("%d", &b);
	int i, len_a = strlen(A),k ;
	for (i = len_a - 1, k = 0; i >= 0; k++, i--)a[k] = A[i]-'0';
	multiplication(a, b, len_a);
	return 0;
}

D 高精度除法

//数值范围:1 
  
#include
#include
​
const int N = 1e5 + 9;
int a[N], b, c[N];
char A[N];
​
void division(int a[],int b, int len_a)
{
     int i, t=0, j=-1,k;
     for (i = 0; i < len_a; i++)
     {
          t =t*10+a[i] ;
          c[i] = t / b;
          t%=b;
     }
     //前面是多余的0则需除去,如001=>1;但要保留商为0时的值,∴j

你可能感兴趣的:(基础算法,算法,c语言,acm竞赛,oj系统,c#)