版权声明:版权归属tangobravo所有 https://blog.csdn.net/tangobravo/article/details/85987255
大整数加法。 实现任意范围的两个整数的加法( 整数的范围用 int 型的变量无法表示,50位)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50//两个整数最多49位
void Inverse(char *s)//翻转字符串
{
char temp;
char *start = s;
char *end = s + strlen(s) - 1;
while (start<end)
{
temp = *start;
*start = *end;
*end = temp;
++start;
--end;
}
}
void BigNumber_add()
{
char ch1[MAX];
char ch2[MAX];
while (gets_s(ch1, MAX) != NULL && gets_s(ch2, MAX) != NULL)
{
char sum[MAX + 1];
int iLen1 = strlen(ch1);
int iLen2 = strlen(ch2);
//int iMaxLen = iLen1 > iLen2 ? iLen1 : iLen2;
int acc=0;//进位值
int iSum;//两位的和
Inverse(ch1);
Inverse(ch2);
char *p1 = ch1;
char *p1end = ch1 + iLen1 - 1;
char *p2 = ch2;
char *p2end = ch2 + iLen2 - 1;
char *p = sum;
while (p1<=p1end||p2<=p2end)
{
if (p1>p1end)
{
iSum = *p2 - '0' + acc;
}
else
{
if (p2>p2end)
{
iSum = *p1 - '0' + acc;
}
else
{
iSum = (*p1 - '0') + (*p2 - '0') + acc;
}
}
*p++ = iSum % 10 + '0';//记得转换回字符
if (iSum > 9)
acc = 1;
else
acc = 0;
++p1;
++p2;
}
if (acc==1)//最后的进位
*p++ = '1';
*p = '\0';
Inverse(sum);
puts(sum);
}
}//BigNumber_add
int main()
{
BigNumber_add();
/*char ch[] = "hello world";
puts(ch);
Inverse(ch);
puts(ch);*/
system("pause");
}