🧠 Algorithm/[C] BOJ
[C언어] 10757번 - 큰 수 A+B
0_ch4n
2022. 3. 31. 23:44
반응형
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
첫째 줄에 A+B를 출력한다.
코드
#include <stdio.h>
#include <string.h>
void reverse(char arr[]) { //배열을 뒤집기 위한 함수
int len = strlen(arr) - 1; //배열의 길이 측정
for(int i = 0; i < (len / 2) + 1; i++) { //맨 끝부터 서로 자리를 바꾸기 때문에 총 길이/2까지 반복
char temp = arr[i];
arr[i] = arr[len - i];
arr[len - i] = temp;
}
}
int main(void) {
char num_a[100000];
char num_b[100000];
char num_sum[100000];
int upper = 0;
int len;
int sum;
scanf("%s %s", num_a, num_b); //두 숫자 입력
reverse(num_a); //배열 뒤집기
reverse(num_b); //배열 뒤집기
if(strlen(num_a) > strlen(num_b)) { //길이가 긴 배열을 기준으로 반복하기 위해 찾기
len = strlen(num_a);
}
else {
len = strlen(num_b);
}
for(int i = 0; i < len; i++) { //배열 길이만큼 반복
if(num_a[i] == '\0') { //a배열에 해당 값이 NULL이라면 b배열에 있는 숫자를 int형으로 바꾼 후 upper를 더한다
sum = num_b[i] - '0' + upper;
}
else if(num_b[i] == '\0') { //b배열에 해당 값이 NULL이라면 a배열에 있는 숫자를 int형으로 바꾼 후 upper를 더한다
sum = num_a[i] - '0' + upper;
}
else { //둘 다 NULL이 아니라면 두 숫자 다 int형으로 바꾼 후 upper와 함께 더한다
sum = (num_a[i] - '0') + (num_b[i] - '0') + upper;
}
if(sum >= 10) { //최종적으로 값이 10 이상이라면 upper에 1을 저장
upper = 1;
}
else {
upper = 0;
}
num_sum[i] = (sum % 10) + '0'; //결과값 배열에 일의 자리 수를 char형으로 바꾼 뒤 저장
}
if(upper == 1) { //맨 마지막 자리 계산 후 남는 upper처리
num_sum[len] = '1';
}
reverse(num_sum); //처음에 뒤집어서 계산했으니 다시 원복시킨다
printf("%s", num_sum); //결과물 출력
return 0;
}
반응형