369 게임 박수 표현 및 횟수 출력
* 그 흔한 369게임.
-------------------------------------------------------
이클립스와 Mingw, JDK로 환경 구성후 첫번째 삽실 프로그램.
회사에서 개인역량 평가를 2016년 하반기부터 시작함에 따라, 입사이후 조금 익혔던 C/C++ 프로그래밍을 다시 시작하다.
도스창에서 --> 실행파일명 숫자 형식으로 입력하면 그 숫자까지 369게임을 출력하고
박수친 횟수를 출력하는 프로그램.
- 1 미만(마이너스 포함)을 입력하면 1까지 게임을 수행
- 10000 초과 입력하면 10000까지 게임을 수행
- 인자(숫자)를 입력하지 않으면 않았다고 출력
- 인자를 띄워쓰기로 2개이상 입력하면 잘못입력했다고 출력
* 실행하면 아래와 같이 동작합니다.
C:\369game\Debug>369game 200
1 2 짝 4 5 짝 7 8 짝 10
11 12 짝 14 15 짝 17 18 짝 20
21 22 짝 24 25 짝 27 28 짝 짝
짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 40
41 42 짝 44 45 짝 47 48 짝 50
51 52 짝 54 55 짝 57 58 짝 짝
짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 70
71 72 짝 74 75 짝 77 78 짝 80
81 82 짝 84 85 짝 87 88 짝 짝
짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 100
101 102 짝 104 105 짝 107 108 짝 110
111 112 짝 114 115 짝 117 118 짝 120
121 122 짝 124 125 짝 127 128 짝 짝
짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 140
141 142 짝 144 145 짝 147 148 짝 150
151 152 짝 154 155 짝 157 158 짝 짝
짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 170
171 172 짝 174 175 짝 177 178 짝 180
181 182 짝 184 185 짝 187 188 짝 짝
짝 짝 짝짝 짝 짝 짝짝 짝 짝 짝짝 200
박수친 횟수는 총 120번입니다.
/*******************************************************************************************
*
* 제 목 : 369 게임 박수 수량 확인 프로그램
*
* 사 번 :
*
* 이 름 : kioeom
*
* 소 속 :
*
********************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
long conv;
if(argc==2) { //파일명과 인자를 포함해 아규먼크 카운트가 2이면 정상 입력한 것으로 파악
conv = strtol(argv[1],NULL,10); //char 형식으로 받은 인자를 long타입 숫자로 converting
}
if(argc==1) { //파일명만 입력하면 표시
printf("실행파일명 뒤에 인수를 입력하지 않으셨습니다.\n1~10000 사이에서 369게임을 진행할 최종 숫자를 입력하십시오.\n");
exit(1);
}
else if (argc>2) { // 인자를 2개 이상 입력하면 표시
printf("%d개의 인수를 입력하셨군요. \n1~10000까지의 숫자중 369게임을 몇까지 할것인지 최종 숫자를 하나만 입력하시오.\n",argc-1);
exit(1);
}
else if(conv < 1) { //인자가 1보다 작으면 1로 간주
conv = 1;
}
else if(conv > 10000) { //인자가 10000보다 크면 10000으로 간주
conv = 10000;
}
int i,j,cnt,ttl=0,a=0,b=0,c=0,d=0;
for(i=1;i<=conv;i++) //입력한 수까지 돌린다는가정입니다.
{
cnt=0;
d=i%10; //1자리 분리
c=(i%100-i%10)/10; //10자리 분리
b=(i%1000-i%100)/100; //100자리 분리
a=(i%10000-i%1000)/1000; //1000자리 분리
if(d%3==0 && d>0) cnt++; //1의자리가 박수칠 타이밍이고 0이 아니면 카운트
if(c%3==0 && c>0) cnt++; //10의자리가 박수칠 타이밍이고 0이 아니면 카운트
if(b%3==0 && b>0) cnt++; //100의자리가 박수칠 타이밍이고 0이 아니면 카운트
if(a%3==0 && a>0) cnt++; //1000의자리가 박수칠 타이밍이고 0이 아니면 카운트
ttl=ttl+cnt; //최종 박수친 횟수 누적을 위함
if(cnt>0) //박수칠 타이밍이 0이상 누적되었으면 해당 숫자대신 짝을 출력
{
for (j=1;j<=cnt;j++)
{
printf("짝");
}
printf(" ");
}
else
{
printf("%d",i); //박수칠 숫자가 아니면 숫자를 출력
printf(" "); //숫자간 띄워쓰기
}
if(i%10==0)
printf("\n"); //10개 숫자 출력시마다 줄바꿈
}
printf("박수친 횟수는 총 %d번입니다.",ttl); //최종 박수친 총 횟수 출력
}