0%

【题解】ACMOJ 11617 字符串相加

题目描述

ACMOJ - 11617 - 字符串相加

给定仅包含数字的字符串 $a,b$,将其按整数规则相加,并返回相应字符串,要求使用指针风格实现

问题分析

这是一道朴素的高精度加法问题,按照竖式加法规则实现即可,若 $a,b$ 长度不同,先对齐后计算

注意如下问题:

  • 处理好字符与整数之间的转换关系
  • 在字符串末尾添加'\0'作为结束符
  • 释放动态内存以避免Memory Leak错误

代码

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
#include <cstdio>
#include <cstring>
#include <algorithm>
const int NMAX = 1005;

char a[NMAX], b[NMAX], *answer;
int n, m;

char *add(char *p, char *q)
{
int p_len = strlen(p), q_len = strlen(q), s_len = 0;
char *s = new char[NMAX];
for (int i = 0; i < 1000; i++)
s[i] = '0';
for (int i = 0; i < 1000; i++)
{
int u = i < p_len ? p[i] - '0' : 0, v = i < q_len ? q[i] - '0' : 0, c = s[i] - '0', w = u + v + c;
s[i] = '0' + w % 10, s[i + 1] = '0' + w / 10;
if (s[i] != '0')
s_len = i + 1;
}
s[s_len] = '\0';
return s;
}

int main()
{
scanf("%d%d%s%s", &n, &m, a, b);
printf("%s\n", answer = add(a, b));
delete[] answer;
return 0;
}