大整数运算之加减乘除

大整数加法

#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);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值