任意正整数相加
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
#define MAX_SIZE 100
void BigNumberPlus(char* num1, char* num2);
int main()
{
char* number1 = new char[MAX_SIZE+1];
char* number2 = new char[MAX_SIZE+1];
gets_s(number1,MAX_SIZE+1);
gets_s(number2,MAX_SIZE+1);
BigNumberPlus(number1,number2);
delete[] number1;
delete[] number2;
return 0;
}
void BigNumberPlus(char* num1, char* num2)
{
int num1_len, num2_len;
num1_len = strlen(num1);
num2_len = strlen(num2);
char* sum = new char[MAX_SIZE+2];
int max_len;
max_len = num1_len > num2_len ? num1_len : num2_len;
char* number1 = new char[max_len+1];
char* number2 = new char[max_len+1];
int i, j;
for (i = num1_len-1,j=0; i >= 0; i--,j++)
{
number1[j] = num1[i];
}
number1[j] = '\0';
for (i = num2_len-1,j=0; i >= 0; i--,j++)
{
number2[j] = num2[i];
}
number2[j] = '\0';
int count = 0;
int pos = 0;
if (num1_len>num2_len)
{
count = num1_len - num2_len;
pos = num2_len;
while (count--)
{
number2[pos++] = '0';
}
number2[pos] = '\0';
}
if (num2_len>num1_len)
{
count = num2_len - num1_len;
pos = num1_len;
while (count--)
{
number1[pos++] = '0';
}
number1[pos] = '\0';
}
int is_carrybit = 0;
bool is_overflow=false ;
int sum_bit=0;
for (i=0;i<max_len;i++)
{
sum_bit = number1[i] - '0' + number2[i] - '0'+is_carrybit;
if (sum_bit > 9)
{
if (i == max_len - 1)
{
is_overflow = true;
}
is_carrybit = 1;
sum_bit -= 10;
}
else
{
is_carrybit = 0;
}
sum[i] = sum_bit + '0';
}
if (is_overflow)
sum[max_len++] = is_carrybit + '0';
sum[max_len] = '\0';
for (i = strlen(sum)-1; i >=0 ; i--)
{
cout << sum[i];
}
delete[] number1;
delete[] number2;
delete[] sum;
}