https://www.acmicpc.net/problem/10757
풀이
풀이라고할 것도 없다. 이건 그냥 아래 블로그의 답을 보고 이해한 다음 고대로 베꼇다.
http://programmerchoo.tistory.com/40
구성은 크게 두 부분으로 나뉜다.
1. 배열 reverse
Ex) 987 -> 789
2. 두 문자열 배열의 합
reverse된 문자열의 합. 만약 올림수가 발생하면 다음 배열에 +1을 해준다.
처음 그림은 입력받은 문자열 A와 B이다. 그리고 A+B이다. A+B의 경우 올리수가 발생하면 배열 전체를 뒤로 밀어야되어 번거롭다.
그래서 Reverse함수를 만들어서 배열의 압뒤를 바꾸어준다. 그 뒤 두 배열을 더해주면 올림수가 발생하여도 다음 인덱스에 +1만 해주면 되기 때문에 매우 간편하다.
다음으로 출력전에 다시 reverse된 A+B배열을 reverse함수를 사용하여 복원시켜주면된다.
제출한 코드
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 | #include <stdio.h> #include <string.h> #define StoD(X) (X==0?0:X-'0') char a[100000], b[100000],S[100000]; void reverse(char *, int); char * add(char * , char *); int main() { scanf("%s %s",a,b); printf("%s",add(a,b)); return 0; } void reverse(char * arr, int len) { char temp; for (int i = 0; i < len / 2; i++) { temp = arr[i]; arr[i] = arr[len - 1 - i]; arr[len - 1 - i] = temp; } return; } char * add(char * A, char * B) { int len = 0, up = 0; if (strlen(A) > strlen(B)) len = strlen(A); else len = strlen(B); reverse(A, strlen(A)); reverse(B, strlen(B)); for (int i = 0; i <= len; i++) { S[i] = (StoD(A[i]) + StoD(B[i]) + up) % 10 + '0'; if ((StoD(A[i]) + StoD(B[i]) + up) > 9)up = 1; else up = 0; } if (S[len] == '0') S[len] = 0; reverse(S, strlen(S)); return S; } | cs |
'SW 업무 관련 > 백준' 카테고리의 다른 글
[BEAKJOON]1520_내리막길_C언어 (0) | 2017.08.12 |
---|---|
[BEAKJOON] 1057_토너먼트_C언어 (0) | 2017.08.12 |
[BEAKJOON] 5427_불_C언어 (0) | 2017.08.09 |
[BEAKJOON] 1074_Z_C언어 (0) | 2017.08.09 |
[BEAKJOON] 3055_탈출_C언어 (0) | 2017.08.07 |