백준(C언어)/22년 8월

8월 4일(목) - 7단계(10757번)

C0MPAS 2022. 8. 4. 22:32

7단계 - 10757번

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제점

1. 단순 A+B 문제가 c/c++에서 왜 이 난이도에서 나오는지를 처음에는 알지 못했다

-> 검색해본 결과, c언어에서 처리가능한 int의 범위 때문에 만들어진 문제라는 것을 인식했다

 

2. 

 

///////////////////////////////////////////

https://kiffblog.tistory.com/172

사실 뭘 어떻게 풀이해야하는지 전혀 감을 잡지를 못해서 위 출처의 코드를 사용했다.

-> 추가적인 복습 및 공부가 필요하다

///////////////////////////////////////////

 

풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void reverse(char arr[])	//계산이 편하도록 배열 역순정렬
{
	int len = strlen(arr);
	for (int i = 0; i < len / 2; i++) 
	{
		char temp = arr[i];
		arr[i] = arr[len - i - 1];
		arr[len - i - 1] = temp;
	}
}
 
int main(void) 
{
	char A[10002] = { 0 }, B[10002] = { 0 }, res[10003] = { 0 };
	int carry = 0, i;
 
	scanf("%s%s", A, B);
	reverse(A);
	reverse(B);

	int len = strlen(A) > strlen(B) ? strlen(A) : strlen(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';	
	reverse(res);
	printf("%s", res);
 
	return 0;
}

 

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