首页 > 代码库 > 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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。