您的位置:首页 > 其它

2006年浙大复试上机题火星A+B

2013-03-17 22:27 155 查看
#include <stdio.h>
#include <string.h>

char str1[100], str2[100];
int dst1[100], dst2[100];

int prim[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113};

int max(int a, int b)
{
	if(a >= b) return a;

	else return b;
}

int main ()
{
	int i;

	while(scanf("%s %s", str1, str2) != EOF)
	{
		if(str1[0] == '0' && str1[1] == '\0' || str2[0] == '0' && str2[1] == '\0') break;

		int len1 = strlen(str1);
		int len2 = strlen(str2);
		
		i = len1 - 1; len1 = 0;

		for(; i >= 0; i --)
		{
			int t = 1, sum = 0;

			while(str1[i] != ',' && i >= 0)
			{
				sum += (str1[i] - '0') * t;

				t *= 10;

				i --;
			}

			dst1[len1 ++] = sum;
		}

		int sum = 0;
		for(i = 0; i < len1; i ++)
		{
			sum += dst1[i];
		}

		if(sum == 0) break;

		i = len2 - 1; len2 = 0;

		for(; i >= 0; i --)
		{
			int t = 1, sum = 0;

			while(str2[i] != ',' && i >= 0)
			{
				sum += (str2[i] - '0') * t;

				t *= 10;

				i --;
			}

			dst2[len2 ++] = sum;
		}

		sum = 0;

		for(i = 0; i < len2; i ++)
		{
			sum += dst2[i];
		}

		if(sum == 0) break;

		if(len1 > len2)
		{
			for(i = len2; i < len1; i ++)
				dst2[i] = 0;
		}

		else if(len2 > len1)
		{
			for(i = len1; i < len2; i ++)
				dst1[i] = 0;
		}
		
		len1 = max(len1, len2);
		
			int count = 0;
			for(i = 0; i < len1; i ++)
			{
				dst1[i] += dst2[i] + count;

				if(dst1[i] >= prim[i])
				{
					dst1[i] -= prim[i];

					count = 1;
				}

				else 
				{
					count = 0;
				}
			}

			if(count == 1) 
			{
				dst1[len1 ++] = 1;
			}

			for(i = len1 - 1; i >= 0; i --)
			{
				if(i != 0) printf("%d,", dst1[i]);

				else printf("%d\n", dst1[i]);
			}
		

	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: