초등학교 때 배우는 두 정수의 곱셈표를 만들어 주는 C 소스이다.
* Filename: makeMultTable.c
*
* Print a multiplication table.
*
* Compile: cl makeMultTable.c
* Execute: makeMultTable 230 5100
*
* Date: 2009/03/06
* Author: pkim (AT) scripts.pe.kr
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
void printUsing();
void printMultTable(int x, int y);
int main(int argc, char *argv[]) {
long x, y;
if (argc >= 3) {
x = atoi(argv[1]);
y = atoi(argv[2]);
printf("\n");
printMultTable(x, y);
}
else {
printUsing();
}
return 0;
}
void printUsing() {
printf("Using: makeMultTable [number1] [number2]\n");
printf("Print a multiplication table for the given two integers.\n");
}
void printMultTable(long x, long y) {
long nx, ny;
long z;
int ntail1;
int ntail2;
int n;
int y1;
int i;
char strX[80];
char strY[80];
char strZ[80];
char strT[80];
char zeros[80];
char whites[80];
char bars[80];
char line1[80];
char line2[80];
char line3[80];
char line4[80];
char loffset[20];
char buf[80];
nx = (x >= 0) ? x : - x;
ny = (y >= 0) ? y : - y;
ntail1 = 0;
ntail2 = 0;
while (nx % 10L == 0L) {
nx = nx / 10L;
ntail1++;
}
while (ny % 10L == 0L) {
ny = ny / 10L;
ntail2++;
}
z = nx * ny;
sprintf(strZ, "%ld", z);
sprintf(strX, "%ld", nx);
sprintf(strY, "%ld", ny);
n = strlen(strY);
strcpy(zeros, "0000000000000000000000000000000000000000");
strcpy(whites, " ");
strcpy(bars, "----------------------------------------");
strcpy(loffset, " ");
sprintf(line4, "%s%ld", loffset, nx*ny);
strncpy(buf, zeros, ntail1 + ntail2);
buf[ntail1 + ntail2] = '\0';
strcat(line4, buf);
strcpy(line1, loffset);
strncpy(buf, whites, strlen(strZ) - strlen(strX));
buf[strlen(strZ) - strlen(strX)] = '\0';
strcat(buf, strX);
strcat(line1, buf);
strncpy(buf, zeros, ntail1);
buf[ntail1] = '\0';
strcat(line1, buf);
strcpy(line2, " x ) ");
strncpy(buf, whites, strlen(strZ) - strlen(strY));
buf[strlen(strZ) - strlen(strY)] = '\0';
strcat(buf, strY);
strcat(line2, buf);
strncpy(buf, zeros, ntail2);
buf[ntail2] = '\0';
strcat(line2, buf);
strcpy(line3, " --");
strncpy(buf, bars, strlen(strZ));
buf[strlen(strZ)] = '\0';
strcat(line3, buf);
printf("%s\n", line1);
printf("%s\n", line2);
printf("%s\n", line3);
if (strlen(strY) > 1) {
for (i = 0; i < strlen(strY); i++) {
buf[0] = strY[strlen(strY) - i - 1];
buf[1] = '\0';
y1 = atoi(buf);
if (y1 != 0) {
sprintf(strT, "%ld", nx * y1);
strcpy(line2, loffset);
strncpy(buf, whites, strlen(strZ) - strlen(strT) - i);
buf[strlen(strZ) - strlen(strT) - i] = '\0';
strcat(buf, strT);
strcat(line2, buf);
printf("%s\n", line2);
}
}
printf("%s\n", line3);
}
printf("%s\n", line4);
}
컴파일> cl makeMultTable.c
실행> makeMultTable 230 5100
결과>
230 x ) 5100 ------ 23 115 ------ 1173000
'프로그래밍 > C' 카테고리의 다른 글
C 언어의 long 타입으로 계산 가능한 최대 팩토리얼은? (0) | 2010.08.11 |
---|---|
스트링 배열 정렬(sorting)하기 with C (0) | 2009.04.17 |
여러 가지 무료 C 컴파일러를 위한 컨솔 입력 테스트 for C (0) | 2009.02.07 |
손으로 만드는 나눗셈 계산표 with C (0) | 2008.05.16 |
삼각형 출력 예제를 통한 여러 가지 소스 비교 with C (0) | 2008.04.05 |