초기 네이버 기록/알고리즘(C)

백준 (C언어)백준 10757번 큰수 A+B문제 리버스 사용

뜨거운 개발자 2023. 1. 4. 00:23

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

void reverse(char* arr)
{
	int len = strlen(arr);
	for (int i = 0; i < len / 2; i++)
	{
		char tmp = arr[i];
		arr[i] = arr[len - i - 1];
		arr[len - i - 1] = tmp;
	}
}

int main()
{
	char arr1[100003] = { 0 };
	char arr2[100003] = { 0 };
	char result[100003] = { 0 };

	scanf("%s %s", arr1, arr2);
	int i = 0;
	int arr1_size = strlen(arr1);
	int arr2_size = strlen(arr2);
	int size = arr1_size;
	int check = 0;
	if (arr1_size < arr2_size)
		size = arr2_size;
	reverse(arr1);
	reverse(arr2);
	for (int i = 0; i < size; i++)
	{
		if (arr1[i] == 0)
			arr1[i] = '0';
		if (arr2[i] == 0)
			arr2[i] = '0';
		result[i] += arr1[i] + arr2[i] - '0';
		
		if (result[i] - '0' >= 10)
		{
			result[i] += -10;
			result[i + 1]++;
		}
	}
	if (result[size] == 1)
		result[size] = '1';

	reverse(result);
	printf("%s", result);
}

이문제는 처음에 참 뻘짓을 많이 했는데 나중에 리버스를 사용하는 아이디어를 쓴 이후에는 나름 쉽게 풀렸다. 자릿수가 다른경우 처리하는 아이디어 역시 뭔가 풀었는데 제대로 이해를 못한 기분이다...

 

이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.

728x90