HDOJ 1002 A + B Problem II

大数题之大数相加,经典的基础题~~

题目地址:

http://acm.hdu.edu.cn/showproblem.php?pid=1002

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 // Author: Tanky Woo
// HDOJ 1002
// Accepted 1002 15MS 204K 1354B C++ Tanky Woo
 
#include <iostream>
#include <algorithm>
using namespace std;
int nCases;
int m[1001], n[1001];
char a[1001], b[1001];
// www.wutianqi.com
int main()
{
	//freopen("input.txt", "r", stdin);
	scanf("%d", &nCases);
	for(int i = 1; i <= nCases; ++i)
	{
		memset(m, 0, sizeof(m));
		memset(n, 0, sizeof(n));
		getchar();
		scanf("%s %s", a, b);
		int len1 = strlen(a);
		int len2 = strlen(b);
		if(len1 > len2)   //是m长度大于n
		{
			// 把字符数组a逆序转成int数组m
			int cnt = 0;
			for(int j = len1-1; j >= 0; --j)
				m[cnt++] = a[j] - '0';
			// 把字符数组b逆序转成int数组n
			cnt = 0;
			for(int j = len2-1; j >= 0; --j)
				n[cnt++] = b[j] - '0';
		}
		else
		{
			// 把字符数组a逆序转成int数组n
			int cnt = 0;
			for(int j = len1-1; j >= 0; --j)
				n[cnt++] = a[j] - '0';
			// 把字符数组b逆序转成int数组m
			cnt = 0;
			for(int j = len2-1; j >= 0; --j)
				m[cnt++] = b[j] - '0';
		}
		int len = len1 > len2? len2: len1;
		int k = 0;  //指示最高位
 
		for(int j = 0; j < len; ++j)
		{
			m[j] += n[j];
			if(m[j] >= 10)
				k = j+1;
			m[j+1] += (m[j]/10);
			m[j] %= 10;
		}
		printf("Case %d:\n", i);
		printf("%s + %s = ",a, b);
		len = len1>len2? len1: len2;
		if(k < len-1)
			k = len-1;
		for(int j = k; j >= 0; --j)
			printf("%d", m[j]);
		i == nCases? printf("\n"): printf("\n\n");
	}
	return 0;
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《HDOJ 1002 A + B Problem II》有340个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注