zl程序教程

您现在的位置是:首页 >  其它

当前栏目

【DG特长生2020 T1】数学题

2020 DG T1 数学题
2023-09-27 14:28:27 时间

数学题

题目链接:None

题目大意

给你两个数,把它们相加。

思路

直接上高精加。
由于规定了是同号,所以不用写高精减。

代码

#include<cstdio>
#include<cstring>
#include<iostream>

using namespace std;

char a[101], b[101];
int l[101], r[101], ln, rn;
int an, bn, zf = 1, ansn, ans[101];

int main() {
//	freopen("math.in", "r", stdin);
//	freopen("math.out", "w", stdout); 
	
	cin >> a >> b;
	an = strlen(a);
	bn = strlen(b);
	
	int st = 0;
	if (a[st] == '-') {
		zf = -1;
		st = 1;
		ln = an - 1;
	}
	else ln = an;
	for (int i = st; i < an; i++) {
		l[an - i - 1] = a[i] - '0';
	}
	st = 0;
	if (b[st] == '-') {
		zf = -1;
		st = 1;
		rn = bn - 1;
	}
	else rn = bn;
	for (int i = st; i < bn; i++) {
		r[bn - i - 1] = b[i] - '0';
	}
	
	if (zf == -1) {
		printf("-");
	}
	
	ansn = max(rn, ln);
	for (int i = 0; i < ansn; i++) {
		ans[i] += l[i] + r[i];
		ans[i + 1] += ans[i] / 10;
		ans[i] %= 10;
	}
	if (ans[ansn]) ansn++;
	
	for (int i = ansn - 1; i >= 0; i--)
		printf("%d", ans[i]);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}