题目描述
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; }
|