https://www.acmicpc.net/problem/1225
코드 (C)
#include <stdio.h>
#include <string.h>
int main()
{
char a[100001], b[100001];
long long sum = 0;
scanf("%s %s", a, b);
int alen = strlen(a);
int blen = strlen(b);
for (int i = 0; i < alen; i++) for (int j = 0; j < blen; j++) sum += (int)(a[i]-48) * (int)(b[j]-48);
printf("%lld ", sum);
return 0;
}
코드 (C++)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string a, b;
long long sum = 0;
cin >> a >> b;
int alen = a.length();
int blen = b.length();
for (int i = 0; i < alen; i++)
{
for (int j = 0; j < blen; j++) sum += (int)(a[i] - 48) * (int)(b[j] - 48);
}
cout << sum;
return 0;
}
코드설명
주어지는 두 수가 10000자리를 넘지 않는 음이 아닌 정수이기 때문에, 문자열로 입력을 받았다.
결과를 저장할 변수 sum은 long long으로 선언했다.
두 수를 문자열로 입력받은 이유는 자릿수를 strlen함수로 바로 구하기 위해서였다. 첫 번째로 입력된 수의 길이를 alen으로, 두 번째로 입력된 수의 길이를 blen으로 저장하고 중첩반복문을 돌면서 곱셈의 결과를 sum에 더해나간다.
이때, 수를 문자열로 입력받았기 때문에, a[i], b[i]에서 48을 뺀 값을 정수형으로 변환해서 계산한다.
느낀 점
처음에 주어지는 두 수가 10000을 넘지 않는다고 잘못 봐서 두 수를 int로 선언하고 입력을 받았다. 당연히 틀렸고, 문제를 다시 읽고 고쳐서 냈다. 조건을 제대로 봐야한다고 다시 느낀 문제였다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C & C++] 1427 소트인사이드 (0) | 2022.08.26 |
---|---|
[백준/C & C++] 1453 피시방 알바 (0) | 2022.08.26 |
[백준/C] 1718 암호 (0) | 2022.08.24 |
[백준/C] 1547 공 (0) | 2022.08.22 |
[백준/C] 1076 저항 (0) | 2022.08.22 |