[백준][c] 10757번: 큰 수 A+B

2021. 8. 14. 19:44·Algorithm/백준
반응형

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

 

10757번: 큰 수 A+B

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

www.acmicpc.net

문제

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

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int i;

//문자열을 좌우 반대로 바꿔줌. index와 자릿수를 통일하기위해
void ReverseStr(char str[]) {

	char tmp;

	for (i = 0; i < strlen(str) * (0.5); i++) 
	{
		tmp = str[i];
		str[i] = str[strlen(str) - i - 1];
		str[strlen(str) - i - 1] = tmp;
	}
}

int main() {
	char a[10005] = { 0 };
	char b[10005] = { 0 };
	char res[10005] = { 0 };	//result. 합계
	int sum;
	int carry = 0;

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

	int len = strlen(a) > strlen(b) ? strlen(a) : strlen(b);	////a와 b중 긴 놈의 길이


	for (i = 0; i < len; i++)
	{	
		sum = a[i] - '0' + b[i] - '0' + carry;
			//a[i]나 b[i]중 하나라도 NULL일 경우 불필요한 뺄셈이 생긴다.
			//빼진 '0'을 res[i]가 양수가 될 때까지 더하여 복원시켜줌.		
		while (sum < 0)	sum += '0';									
		if (sum >= 10) carry = 1;
		else carry = 0;			
		res[i] = sum % 10 + '0';
	}
	if (carry == 1) res[len] = '1';

	ReverseStr(res);
	printf("%s", res);	
}

문제풀이

int 자료형은 4Byte로 (-2의 31승 ~ 2의 31승 - 1)까지 범위의 정수만 담을 수 있습니다. 

이 범위를 벗어나는 큰 수를 입력 받고, 계산하여 출력하는 것이 목표이겠습니다.

따라서 전체적인 개요는 다음과 같습니다.

  1. %d가 아닌 %s로 문자열을 입력받습니다.
  2. 문자를 정수로 변환하여 계산합니다.
  3. 결과값을 문자로 출력합니다.

 

'0'의 아스키코드 값은 48이고, '1'의 아스키코드 값은 49입니다.

숫자처럼 보이는 문자를 숫자로 변환시에 '0'을 빼주는 이유입니다.

( '3' - '0' = '3' - 48 = 51 - 48 = 3 )

비고

'문자'를 c언어로 다루는 것은 항상 어렵다고 생각합니다. 

(int)a[i] 와 같은 꼴로 하면 안되고, 아스키 코드의 연산을 생각하셔야합니다!!!!

반응형
저작자표시 비영리 (새창열림)

'Algorithm > 백준' 카테고리의 다른 글

[백준][C] 2805번 나무자르기 (by 이진탐색)  (0) 2021.12.27
[백준][C/C++] 1541번 잃어버린 괄호  (0) 2021.12.24
[백준][c] 2839번: 설탕 배달  (0) 2021.07.22
[백준][c] 5585번: 거스름돈  (0) 2021.07.16
[백준][c] 10162번: 전자레인지 (by 그리디 알고리즘)  (0) 2021.07.16
'Algorithm/백준' 카테고리의 다른 글
  • [백준][C] 2805번 나무자르기 (by 이진탐색)
  • [백준][C/C++] 1541번 잃어버린 괄호
  • [백준][c] 2839번: 설탕 배달
  • [백준][c] 5585번: 거스름돈
Giken
Giken
𝐒𝐲𝐬𝐭𝐞𝐦.𝐨𝐮𝐭.𝐩𝐫𝐢𝐧𝐭𝐥𝐧("𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!");
  • Giken
    개발자 기켄
    Giken
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Programming Language (26)
        • C (3)
        • C++ (2)
        • Java (19)
      • Web (4)
      • Database (1)
        • SQL (5)
      • Spring (10)
      • PHP (7)
      • Linux (1)
      • Server (1)
      • Infra (3)
      • Algorithm (74)
        • 백준 (71)
        • 프로그래머스 (0)
      • 프로젝트 (2)
      • Etc (8)
      • 낙서 (5)
  • 블로그 메뉴

    • GitHub
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    SQL
    백준
    9498
    2753
    C
    2588
    프로그래머스
    SQL고득점키트
    1330
    DB
    윤년
    평년
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[백준][c] 10757번: 큰 수 A+B
상단으로

티스토리툴바