面试题: 大数相加

/*思想是新建两个字符串指针分别指向两串字符串的末尾数据,然后开始往前加*/

直接上程序:

/*大数相加*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void add(char a[],char b[])
{
	int len_a = strlen(a);
	int len_b = strlen(b);

	
	char* p = a + len_a - 1;
	char* q = b + len_b - 1;

	
	int len = 0;
	int flag = 0;
	int temp = 0;
	char * c = NULL;  //建立新的字符串存储数据 
	int num = 0;
	if (len_a > len_b)
	{
		c = (char*)malloc(len_a+1);   //分配空间 
	}	
	else
	{
		c = (char*)malloc(len_b+1);
	}
	while(p >= a || q >= b)
	{
			temp = 0;
			if (p >= a)
			{
				temp += *p - '0';
				p--;
			}
			if (q >= b)
			{
				temp += *q - '0';
				q--; 
			}
			if (flag != 0)
			{
				temp++;
			}
			if (temp >= 10)
			{
				flag++;
				temp %= 10;
			}
			else
			{
				flag = 0;
			}
			*c++ = temp+'0'; 
			num++;			
	} 
	if (flag != 0)
	{
		*c++ = '1';
		num++;
	}
	while (num>=0)
	{
		c--;
		printf("%c",*c);
		num--;
	}
	
	c++;
	free(c);	
}
int main(void)
{
	char a[80];
	char b[80];
	memset(a,0,80);
	memset(b,0,80);
	printf("input a:");
	scanf("%s",a);
	printf("input b:");
	scanf("%s",b);
	add(a,b);
	return 0;
}


你可能感兴趣的:(C++,c,面试题)