大整数加法 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy
两个字符串模拟数字相加.
代码:
/*
* test.cpp
*
* Created on: 2014.04.24
* Author: Spike
*/
/*eclipse cdt, gcc 4.8.1*/
#include <iostream>
#include <cstring>
using namespace std;
char* add(char* number_a, char* number_b) {
int len_a = strlen(number_a); //计算长度
int len_b = strlen(number_b);
int max = len_a>len_b ? len_a : len_b;
int* na = new int [max+1];
int* nb = new int [max+1];
memset(na, 0, sizeof(int)*(max+1));
memset(nb, 0, sizeof(int)*(max+1));
int j = 0;
for(int i=len_a-1; i>=0; i--)
na[j++] = number_a[i] - '0';
j = 0;
for(int i=len_b-1; i>=0; i--)
nb[j++] = number_b[i] - '0';
for(int i=0; i<max; i++) {
na[i] += nb[i]; //逐位相加
if(na[i] >= 10){
na[i] -= 10;
na[i+1]++; //进位
}
}
char* result = new char[max+2];
for(int i=0; i<max+1; ++i){
result[i] = (char)(((int)'0')+na[max-i]);
}
result[max+1] = '\0';
return result;
}
int main(void){
char* number_a = "51234";
char* number_b = "51234";
std::cout << number_a << " + " << number_b << " = " << std::endl;
char* result = add(number_a, number_b);
std::cout << result << std::endl;
delete[] result;
return 0;
}
输出:
51234 + 51234 =
102468