baekjoon 10757

p3pwp3p·2022년 3월 1일
0

baekjoon

목록 보기
10/38

https://www.acmicpc.net/problem/10757


Idea

이 문제는 언어빨이 많이 타는 듯 하다. 트렌디한 언어를 써야하는 이유....
당연히 정수 자료형으로는 에러가 뜬다. 그러면 문자열을 쓰면?
문자열을 이용해서 수를 계산하는 문제에는 항상 아스키 코드가 따라온다.
https://www.ascii-code.com/

순서를 생각해보자.

1. 문자열 배열로 A, B를 입력 받는다.
2. 연산은 1의 자리부터 시작되기 때문에 문자열을 뒤집어준다.
3. 두 배열의 원소마다 '0'의 아스키 코드값을 빼준다.
4. 두 배열의 같은 자리 원소끼리 더하고 변수에 저장한다.
5. 자리올림이 발생하면 다음 계산 때 1만큼 더해준다.

자잘한 코드들이 위 순서들 사이에 추가가 되는데 한 번 생각해보면 좋습니다.


Code

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

void reverseString(char *a);

int main(void) {
	char a[10002] = { 0, };
	char b[10002] = { 0, };
	char res[10003] = { 0, };
	int carry = 0;
	int len, i;

	scanf("%s %s", a, b);

	len = strlen(a) > strlen(b) ? strlen(a) : strlen(b);

	reverseString(a);
	reverseString(b);

	for (i = 0; i < len; i++) {		
		int sum = a[i] - '0' + b[i] - '0' + carry;
		while (sum < 0) {
			sum += '0';
		}
		if (sum > 9) {
			carry = 1;
		}
		else {
			carry = 0;
		}
		res[i] = sum % 10 + '0';
	}

	if (carry == 1) {
		res[len] = '1';
	}

	reverseString(res);

	printf("%s", res);

	return 0;
}

void reverseString(char *a) {
	size_t length = strlen(a);

	for (int i = 0; i < length / 2; i++) {
		char temp = a[i];
		a[i] = a[length - i - 1];
		a[length - i - 1] = temp;
	}
}

후..

profile
💭(。•̀ᴗ-)✧

0개의 댓글