반응형
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=649&sca=99&sfl=wr_hit&stx=1374
#include <stdio.h>
char A[205], B[205], add[205];
char* pB, * pS;
int alen, blen, biglen, smalllen, bgidx;
int strlen(const char* s, int len = 0) {
while (s[len]) len++;
return len;
}
int strcmp(const char* s, const char* t) {
while (*s && *s == *t) s++, t++;
return *s - *t;
}
void strcpy(char* dest, const char* src) {
while ((*dest++ = *src++));
}
int input() {
for (int i = 0; i < 205; i++) A[i] = B[i] = add[i] = 0;
scanf("%s", A);
scanf("%s", B);
alen = strlen(A);
blen = strlen(B);
if (alen == 1 && blen == 1 && A[0] == '0' && B[0] == '0') return 0;
else return 1;
}
void addf(int si, char val) {
int s = val - '0', b = (add[biglen + 1 - si]) ? (add[biglen + 1 - si] - '0') : (0);
if (s + b >= 10) {
add[biglen + 1 - si] = b + s - 10 + '0';
addf(si + 1, '1');
}
else add[biglen + 1 - si] = b + s + '0';
}
void subf(int si, char val) {
int s = val - '0', b = pB[biglen - si] - '0';
if (s > b) {
pB[biglen - si] += 10 - s;
subf(si + 1, '1');
}
else pB[biglen - si] -= s;
}
int main(void) {
while (input()) {
int result = strcmp(A, B), i;
if (alen > blen) { pB = A; pS = B; biglen = alen; smalllen = blen; }
else if (blen > alen) { pB = B; pS = A; biglen = blen; smalllen = alen; }
else if (result >= 0) { pB = A; pS = B; biglen = alen; smalllen = blen; }
else { pB = B; pS = A; biglen = blen; smalllen = alen; }
strcpy(&add[1], pB);
for (i = smalllen - 1; i >= 0; i--) {
addf(smalllen - i, pS[i]);
subf(smalllen - i, pS[i]);
}
for (i = 0; add[i] == 0 || add[i] == '0'; i++) {}
printf("%s\n", add + i);
if (result) {
for (i = 0; pB[i] == 0 || pB[i] == '0'; i++) {}
printf("%s\n", pB + i);
}
else printf("0\n");
}
return 0;
}
반응형
'프로그래밍 알고리즘' 카테고리의 다른 글
[정올 1419] 엔디안 (0) | 2023.01.04 |
---|---|
[정올 1411] 두 줄로 타일 깔기 (0) | 2023.01.03 |
[정올 1357] 합이 0이 되는 4개의 숫자들 (0) | 2023.01.03 |
[정올 1335] 색종이만들기(영역구분) (0) | 2023.01.03 |
[정올 1332] 작명하기 (0) | 2023.01.03 |