HDU 1230(火星A+B)

参考博客:题意代码

#include <cstdio>
#include <cstring>
const int MAXN = 30;

int primes[26] = { 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 }; //素数
int a[MAXN], b[MAXN], sum[MAXN]; //加数,加数,和
int acount, bcount, scount; //加数位数,加数位数,和位数
char c; //其他字符(逗号、空格、换行)

int main()
{
    while (true)
    {
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
        memset(sum, 0, sizeof(sum));

		int i = 0;
		while (scanf("%d%c", &a[i], &c)) //读取第一个加数
		{
			if (c == ' ')
				break;
			else
				++i;
		}
		acount = i;

		i = 0;
		while (scanf("%d%c", &b[i], &c)) //读取第二个加数
		{
			if (c == '\n')
				break;
			else
				++i;
		}
		bcount = i;

		if (acount == 0 && bcount == 0 && a[0] == 0 && b[0] == 0)
			break;

		scount = (acount > bcount) ? acount : bcount;

		for (int i = acount, j = 0; i >= 0; i--, j++) //加上第一个加数(低位在前)
			sum[j] += a[i];

		for (int i = bcount, j = 0; i >= 0; i--, j++) //加上第二个加数(低位在前)
			sum[j] += b[i];

		for (i = 0; i <= scount; i++) //依次进位
		{
			if (sum[i] >= primes[i])
			{
				sum[i] -= primes[i];
				sum[i + 1]++;
			}
		}

		if (sum[scount + 1] > 0) //最高位进位,总位数加1
			++scount;

		for (i = scount; i > 0; i--) //从后向前输出
			printf("%d,", sum[i]);
		printf("%d\n", sum[0]);
	}
	return 0;
}

继续加油。

发布了152 篇原创文章 · 获赞 1 · 访问量 7617

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/104693089