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;
}
}
후..