PS (C, C++)

[백준/C & C++] 1225 이상한 곱셈

최연재 2022. 8. 24. 17:57

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

 

1225번: 이상한 곱셈

첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는 음이 아닌 정수이다. 수가 0인 경우에는 0만 주어지며, 그 외의 경우 수는 0으로 시작하지 않는다.

www.acmicpc.net

 

코드 (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