2023년 1월 ~ 2월에 프로그래밍을 공부하기 위해 풀었던 문제들이다.
세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
입력
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.
출력
첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.
string 헤더에 포함된 to_string(변수명) 함수
stringstream 스트링변수명;
10으로 계속 나누어 나눈 나머지를 통해 한자리씩 분리 →
while(a != 0){
cout << a%10 << "\n";
a /= 10;
}
스트링변수명 << 정수
to_string()을 쓰면 한글자씩 배열의 한 인덱스를 차지 할 줄 알았는데, 출력해보니 이런 이상한 결과가 나왔다. 숫자를 한글자씩 배열에 저장하는 법은 없는걸까..
그래서 결국 구글링을 통해 새로운 방법을 찾았다.
참고한 글 바로가기
또한 % 연산자는 int형 만 계산이 가능하다는 것과 데이터 타입이 양변이 맞아야 순탄하게 돌아간다는 것도 알았다.
// 숫자의 개수
#include <iostream>
#include <vector>
using namespace std;
int main() {
long long a, b, c;
long long result;
cin >> a >> b >> c;
result = (a * b * c);
vector<long long> store;
while (result != 0) {
store.push_back(result % 10);
result /= 10;
}
for (int i = 0; i <= 9; i++) {
int count = 0;
for (int j = 0; j < store.size(); j++) {
if (store[j] == i)
count++;
}
cout << count << '\n';
}
}