高精度加法
/* Author:JustinZhang Email:uestczhangchao@gmail.com Time:2012年4月22日23:39:40 desc:高精度加法 */ #include <iostream> #include <cstring> using namespace std; /* a、b为字符数组,内部存储了加数和被加数,ans用来存放最终结果,也为字符数组 */ void arbitary_add(const char *a, const char *b,char *ans) { int lena = strlen(a); int lenb = strlen(b); int maxlen = (lena > lenb) ? lena : lenb; //求得两个串长的最大者 int *arrayA = new int [maxlen+1]; int *arrayB = new int [maxlen+1]; int *intans = new int [maxlen+1];//用来存放两个字符串的数字相加的结果 int i=0,j=0; //对加法的结果数组清零 for(i=0; i<maxlen+1; i++) { intans[i] = 0; arrayA[i] = 0; arrayB[i] = 0; } //将加数字符串中的数组取出来,放到整型数组当中,字符数组的第一个字符对应于整数的最高位. for(i=0; i<lena; i++) { arrayA[lena-i-1] = a[i] - '0'; } //将被加数字符串中的数组取出来,放到整型数组当中,字符数组的第一个字符对应于整数的最高位. for(j=0; j<lenb; j++) { arrayB[lenb-j-1] = b[j] - '0'; } //根据上面得到的整型数组,一位一位的做加法操作 for(i=0; i<maxlen; i++) { intans[i] += arrayA[i]+ arrayB[i]; //如果第i位的结果超过10,那么就向第i+1位进位 if(intans[i] > 9) { intans[i] = intans[i] - 10; intans[i+1] = intans[i+1] + 1; } } //如果最高位有进位 if(intans[maxlen]!=0) { ans[0] = intans[maxlen]+'0'; //将整型数组转换为字符数组 for(i=1; i<=maxlen;i++) { ans[i] = intans[maxlen-i]+'0'; } ans[maxlen+1] = '\0'; } else { //将整型数组转换为字符数组 for(i=0; i<maxlen;i++) { ans[i] = intans[maxlen-i-1]+'0'; } ans[maxlen] = '\0'; } delete [] arrayA; delete [] arrayB; delete [] intans; } int main() { int count = 0; char *ans = new char[20]; char *s1 = "1239945"; char *s2 = "79999999"; arbitary_add(s1,s2,ans); while(ans[count]!='\0') { cout << ans[count++] ; } cout << endl; delete [] ans; return 0; }