190104作业-字符串实现大整数加法

版权声明:版权归属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");
}

猜你喜欢

转载自blog.csdn.net/tangobravo/article/details/85987255
今日推荐