首页 > 代码库 > ACM: A + B Problem II (两个大整数相加)

ACM: A + B Problem II (两个大整数相加)

 

Code:

#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAX 1000//给数组赋值void arrV(int a[],int len,int p){	int i;	for(i=0;i<len;i++){		a[i]=p;	}}//打印数组中的运算结果void printRverse(int a[]){		int len=0,i=0;	while(a[i]!=-1){		len++;		i++;	}	for(i=len-1;i>-1;i--){		printf("%d",a[i]);	}}//两个数组相加void arrSum(int a[],int b[],int s[],int len_a,int len_b){	int jin=0,i=0,j=0,temp;	int len=len_a<=len_b?len_a:len_b;	for(;i<len;i++){		temp=a[i]+b[i];		if(temp<9){			s[i]=jin==0?temp:temp+1;			jin=0;		}else if(temp==9){			if(jin==0){				s[i]=temp;				jin=0;			}else{				s[i]=0;				jin=1;			}		}else{			s[i]=jin==0?temp%10:temp%10+1;			jin=1;		}		//printf("%d=[%d]\n",i,s[i]);	}	if(len_a>len_b){		while(i<len_a){			if(jin==0){				s[i]=a[i];			}else{				if(a[i]<9){					s[i]=a[i]+1;					jin=0;				}else if(a[i]==9){					s[i]=0;					jin=1;				}			}			i++;		}		if(jin==1){			s[i]=1;		}	}else{		while(i<len_b){			if(jin==0){				s[i]=b[i];				jin=0;			}else{				if(b[i]<9){					s[i]=b[i]+1;					jin=0;				}else if(b[i]==9){					s[i]=0;					jin=1;				}			}			i++;		}		if(jin==1){			s[i]=1;		}	}}//将读入的字符串转入到整型数组中void charToArray(char *p,int a[],int *len){	int i,j=0;	*len=strlen(p);	for(i=*len-1;i>-1;i--){		a[j]=p[i]-48;		j++;	}}int main(){	int n,a[MAX],b[MAX],s[MAX],i=1,j=0,len_a,len_b;	char p[MAX],q[MAX];		scanf("%d",&n);	while(n>0){		arrV(a,MAX,-1);		arrV(b,MAX,-1);		arrV(s,MAX,-1);		scanf("%s %s",p,q);		charToArray(p,a,&len_a);		charToArray(q,b,&len_b);		arrSum(a,b,s,len_a,len_b);		printf("Case %d:\n",i);		printf("%s + %s = ",p,q);		printRverse(s);		printf("\n");		if(n>1){			printf("\n");		}		i++;		n--;	}			return 1;}