火星A+B

做的有点混乱,效率也不是太高,如分割数字时,就不如挨个扫描来的快,怎么就没想到呢?笨呢!还有可以先求出前25个素数,这样代码效率会高些长度也会小些。

#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <algorithm>

// 浙大2006 杭电1230

using namespace std;

#define MAX 25

int prime[MAX];

bool isPrime(int n)
{
	for (int i = 2; i * i <= n; i++)
		if (n % i == 0)  return false;
	return true;
}

void rev(int a[], int len)
{
	for (int i = 0, j = len-1; i < j; i++,j--)
	{
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
}


int getData(char *s,int a[])
{
	char *seps = ",";
	char *token;
	int i = 0;

	token = strtok(s, seps);
	while (token != NULL)
	{
		a[i++] = atoi(token);
		token = strtok(NULL, seps);
	}
	rev(a, i);
	return i;
}

// add a and b
int add(int a[], int b[], int ans[], int len_a, int len_b)
{
	int i;
	for (i = 0; i < len_a && i < len_b; i++)
	{
		ans[i] += a[i] + b[i];
		if (ans[i] >= prime[i])
		{
			ans[i+1] += ans[i] / prime[i];
			ans[i] %= prime[i];
		}
	}

	if (len_a != len_b)
	{
		for(; i < len_a; i++)
		{
			ans[i] += a[i];
			if (ans[i] >= prime[i])
			{
				ans[i+1] += ans[i] / prime[i];
				ans[i] %= prime[i];
			}
		}
		for(; i < len_b; i++)
		{
			ans[i] += b[i];
			if (ans[i] >= prime[i])
			{
				ans[i+1] += ans[i] / prime[i];
				ans[i] %= prime[i];
			}
		}
	} // end of if(len_a != len_b)

	// return the length of the answer
	if (ans[i] != 0)
		return i+1;
	else 
		return i;

}

int
main(void)
{
	int a[MAX];
	int b[MAX];
	int ans[26];
	int len_a;
	int len_b;
	char s[500];
	// fstream cin("hello.txt");

	for (int i = 0, j = 2; i < 25; j++)
	{
		if (isPrime(j))
			prime[i++] = j;
	}

	while(true)
	{
		len_a = 0;
		len_b = 0;
		// 获取a
		cin >> s;
		len_a = getData(s, a);
		// 获取b
		cin >> s;
		len_b = getData(s, b);

		if (len_a == 1 && len_b == 1 && a[0] == 0 && b[0] == 0)
			break;

		memset(ans, 0, sizeof(int)*26);

		// 计算并输出计算结果
		int len_ans = add(a, b, ans, len_a, len_b);
		for (int i = len_ans-1; i >=0; i--)
		{
			cout << ans[i];
			if (i == 0)
				cout << endl;
			else
				cout << ",";
		}

	}
	return 0;
}

  

posted @ 2012-02-24 21:34  吞枣  Views(203)  Comments(0)    收藏  举报