您的位置:首页 > 其它

大数加法

2015-10-21 13:49 253 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

void reverse_str(char *pBegin, char *pEnd){
while(pBegin < pEnd){
char t = *pBegin;
*pBegin = *pEnd;
*pEnd = t;
++pBegin;
--pEnd;
}
}

bool add(const char *pA, const char *pB, char *pSum, int maxSumLen){
if(pA == NULL || pB == NULL || pSum == NULL || maxSumLen <= 0){
return false;
}
int lenA = strlen(pA);
int lenB = strlen(pB);
int k = 0;
pSum[k] = 0;
for(int i = lenA - 1, j = lenB - 1; (k <= maxSumLen - 2 && (i >= 0 || j >= 0)); i--, j--, k++){
int a = i >= 0 ? pA[i] - '0' : 0;
int b = j >= 0 ? pB[j] - '0' : 0;
pSum[k] += a + b;
pSum[k + 1] = pSum[k] >= 10 ? pSum[k] / 10 : 0;
pSum[k] = pSum[k] % 10 + '0';
}
pSum[k] = '\0';
reverse_str(pSum, pSum + k - 1);
return true;
}

int main(){
char strA[] = "123499999";
char strB[] = "223999999";
char strSum[10];
add(strA, strB, strSum, 10);
printf("strA:%s, strB:%s, strSum:%s\n", strA, strB, strSum);
printf("result:%d\n", atoi(strSum)  == (atoi(strA) + atoi(strB))%1000000000);
return 0;
}


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