您的位置:首页 > 编程语言 > C语言/C++

大数四则运算(C语言)

2007-04-17 22:27 330 查看
完全按照自己的想法做的,所以不太成熟,希望有兴趣的朋友提出意见!


#include<stdio.h>


#include<string.h>




//最大数长度


#define MAX 200




//读入输入的大整数,a[0]存储大整数的长度


void read(int *a)


{


unsigned int i,len;


char s[MAX];


scanf("%s",&s);


a[0] = strlen(s);




for(i=0; i<a[0]; i++)


{


if(s[i]>='0' && s[i]<='9')


a[a[0]-i] = s[i]-'0';


else


{


printf("输入出错!");


exit(0);


}


}


}




//加法


void add(int *a, int *b, int *c)


{


int k = 0, i, max_len;


max_len = a[0];


if(b[0] > max_len)


max_len = b[0];


for(i=0; i<max_len; i++)


{


k = k + a[i+1] + b[i+1];


c[i+1] = k%10;


k = k/10;


}


if(k != 0)


{


c[i+1] = k;


c[0] = i+1;


for(; i<MAX-2; i++)


c[i+2] = 0;


}


else


{


c[0] = i;


for(; i<MAX-1; i++)


c[i+1] = 0;


}


}




//比较两个数组表示的整数的大小,a>b返回1,否则返回0


int compare(int *a, int *b)


{


int i;


if(a[0] > b[0])


return 1;


else if(a[0] == b[0])


{


for(i=0; i<a[0]; i++)


{


if(a[a[0]-i] > b[b[0]-i])


return 1;


}


return 2;


}


else


return 0;


}




//减法


void subABigerB(int *a, int *b, int *c)


{


int i;


for(i=1; i<a[0]+1; i++)


{


if(a[i] >= b[i])


{


//k = 0;


c[i] = a[i] - b[i];


}


else


{


//k = 1;


while(a[i+1] == 0)


i++;




a[i+1]--;


c[i] = a[i] + 10 - b[i];


}


}


c[0] = a[0];


}






//减法


void sub(int *a, int *b, int *c)


{


int i;


for(i=0; i<MAX; i++)


{


c[i] = 0;


}


if(compare(a, b) == 1)


{


subABigerB(a, b, c);




//打印


printf("Difference: ");


i = c[0];


while(c[i] == 0)


i--;


for(; i>0; i--)


{


printf("%d",c[i]);


}


printf(" ");


}


else if(compare(a, b) == 0)


{


subABigerB(b, a, c);




//打印


printf("Difference: ");


i = c[0];


while(c[i] == 0)


i--;


printf("-");


for(; i>0; i--)


{


printf("%d",c[i]);


}


printf(" ");


}


else


//打印


printf("Difference: 0 ");


}




//数组与单个整数的乘法


void singleMul(int *a, int m, int *c)


{


int k = 0, i;




for(i=0; i<a[0]; i++)


{


k = k + a[i+1] * m;


c[i+1] = k%10;


k = k/10;


}




if(k != 0)


{


c[i+1] = k;


c[0] = i+1;


}


else


c[0] = i;


}




//整数数组之间的乘法


void mul(int *a, int *b)


{


int k = 0, i, c[MAX], d[MAX], e[MAX], max_len;


int f = 0, j;




memset(c,0,sizeof(c));


memset(d,0,sizeof(d));


memset(e,0,sizeof(e));


max_len = a[0];


if(b[0] > max_len)


max_len = b[0];




//d = singleMul(a, b[1]);


for(i=0; i<b[0]; i++)


{


singleMul(a, b[i+1], c);


if(i-1>=0)


d[0] = d[0]-1;


d[1] = d[0];


add(&d[1], c, d);


e[i+1] = d[1];


}






for(j=0; j<d[0]-1; i++,j++)


{


e[i+1] = d[2+j];


}




e[0] = i;




//打印


for(i=e[0]; i>0; i--)


{


printf("%d",e[i]);


}


printf(" ");


}






int main()


{


int a[MAX],b[MAX],c[MAX],a_len,b_len,max_len;


int i;


//清零


memset(a,0,sizeof(a));


memset(b,0,sizeof(b));


memset(c,0,sizeof(c));


read(a);


read(b);




//加法


add(a, b, c);




printf("Sum: ");


//打印


for(i=c[0]; i>0; i--)


{


printf("%d",c[i]);


}


printf(" ");




//printf("%d",compare(a, b));




//减法


sub(a, b, c);




//乘法


printf("Product: ");


mul(a, b);


//system("pause");


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: