세 개의 자연수 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까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.
150
266
427
3
1
0
2
0
0
0
2
0
0
지난 번 포스트에서는 같은 문제를 C언어로 풀이했었는데 시간이 좀 걸렸어서;;
C++로는 이번에 풀어보려고 합니다!
그 전에 sprintf함수에 대해서도 좀더 자세히 정리하고 갈게요:)
int sprintf(char* str, const char* format, ...);
<사용된 인자들>
str
문자를 요소로 갖는 배열의 버퍼를 가리키는 포인터, 문자열이 저장되어 있다.
이때, 버퍼는 문자열을 담을 수 있는 크기여야 함
format
printf의 형식과 동일한 문자열 형식
...(추가적인 변수들)
형식 문자열에 따라 함수에 변수들이 추가될 수 있는데,
이 변수들은 형식지정자 자리를 대체할 형식 문자열 값을 포함해야 한다.
이 추가적인 변수들은 최소 형식지정자가 지정한 값의 개수만큼은 있어야 하며,
함수에 의해 무시될 수도 있다.
정상적으로 실행된다면 입력한 문자의 개수가 반환된다.
이때 자동으로 추가된 null 문자는 개수에 포함되지 않는다.
실행이 실패하면 음수값이 반환된다.
#include <stdio.h> int main () { char buffer [50]; int n, a=5, b=3; n=sprintf (buffer, "%d plus %d is %d", a, b, a+b); printf ("[%s] is a string %d chars long\n",buffer,n); return 0; }
예제 출력:
[5 plus 3 is 8] is a string 13 chars long
그럼 이제 2577번을 C++코드로 작성해보겠습니다.
#include <iostream> using namespace std; int main() { int A, B, C, mul; int N[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; char M[9]; cin >> A >> B >> C; mul = A*B*C; sprintf(M, "%d", mul); for (int i=0; i<=9; i++){ for (int j=0; j<=9; j++){ if (M[i]-'0' == j) N[j]++; } } for (int i=0; i<10; i++) cout << N[i] << '\n'; return 0; }