大整数加法
#include <stdio.h>
const int N=4;
static int carry=0;
void add(int *a, int *b, int *c)
{
int i;
for(i = N - 1; i >= 0; i--)
{
c[i] = a[i] + b[i] + carry;
//if(c[i] < 10000)
//carry = 0;
//else {
//c[i] = c[i] - 10000;
//carry = 1;
//}
carry=c[i]/10000;
c[i]=c[i]%10000;
}
}
void print(int *c,int k)
{int i;
for (i=0;i<k;i++)
printf("%04d",c[i]);
printf("\n");
}
int main()
{int i,a[N]={1234,5678,3344,5566},b[N]={4321,8765,8899,7766},c[N];
for (i=0;i<N;i++)
{c[i]=0;}
add(a,b,c);
if (carry==1)
printf("%d",carry);
print(c,N);
}
大整数减法
#include <stdio.h>
const int N=4;
int borrow=0;
void sub(int *a, int *b, int *c) {
int i;
for(i =N- 1; i >= 0; i--) {
c[i] = a[i] - b[i] - borrow;
if(c[i] >= 0)
borrow = 0;
else {
c[i] = c[i] + 10000;
borrow = 1;
}
}
}
void print(int *c,int k)
{int i;
for (i=0;i<k;i++)
printf("%04d",c[i]);
printf("\n");
}
int main()
{int i,a[N]={1234,5678,3344,5566},b[N]={4321,8765,8899,7766},c[N];
for (i=0;i<N;i++)
{c[i]=0;}
sub(a,b,c);
if (borrow==0) print(c,N);
else
{borrow=0;
sub(b,a,c);printf("-");print(c,N);
}
}
#include <stdio.h>
const int N=4;
static int carry=0;
void mul(int *a, int b, int *c)
{
int i, tmp;
carry = 0;
for(i =N- 1; i >=0; i--) {
tmp = a[i] * b + carry;
c[i] = tmp % 10000;
carry = tmp / 10000;
}
}
void print(int *c,int k)
{int i;
for (i=0;i<k;i++)
printf("%04d",c[i]);
printf("\n");
}
int main()
{int i,d=123,a[N]={1234,5678,3344,5566},c[N];
for (i=0;i<N;i++)
{c[i]=0;}
mul(a,d,c);
if (carry!=0) printf("%d",carry);
print(c,N);
}
大整数除法
#include <stdio.h>
const int N=4;
int remain=0;
void div(int *a, int b, int *c)
{
int i, tmp;
for(i =0; i <N; i++) {
tmp = a[i] + remain;
c[i] = tmp / b;
remain = (tmp % b) * 10000;
}
}
void print(int *c,int k)
{int i;
for (i=0;i<k;i++)
printf("%04d",c[i]);
printf("\n");
}
int main()
{int i,d=123,a[N]={1234,5678,3344,5566},c[N];
for (i=0;i<N;i++)
{c[i]=0;}
div(a,d,c);
print(c,N);
}