CH10_1
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define STACK_SIZE 100
char contents[STACK_SIZE];
int top = 0;
void make_empty(void);
int stack_overflow(void);
int stack_underflow(void);
bool is_empty(void);
bool is_full(void);
void push(char i);
char pop(void);
int main(void)
{
char ch;
make_empty();
printf("Enter parentheses and/or braces: ");
do {
ch = getchar();
if (ch == '(' || ch == '{') {
push(ch);
}
else if (ch == ')' && pop() != '(') {
printf("Parentheses/braces are not nested properly\n");
return 0;
}
else if (ch == '}' && pop() != '{') {
printf("Parentheses/braces are not nested properly\n");
return 0;
}
} while (ch != '\n');
if (is_empty()) {
printf("Parentheses/braces are nested properly\n");
}
else {
printf("Parentheses/braces are not nested properly\n");
}
return 0;
}
int stack_overflow(void)
{
printf("Stack overflow\n");
exit(EXIT_FAILURE);
}
int stack_underflow(void)
{
printf("Stack underflow\n");
exit(EXIT_FAILURE);
}
void make_empty(void)
{
top = 0;
}
bool is_empty(void)
{
return top == 0;
}
bool is_full(void)
{
return top == STACK_SIZE;
}
void push(char i)
{
if (is_full()) {
stack_overflow();
}
else {
contents[top++] = i;
}
}
char pop(void)
{
if (is_empty()) {
stack_underflow();
}
else {
return contents[--top];
}
}
CH10_2
#include <stdbool.h> /* C99 only */
#include <stdio.h>
#include <stdlib.h>
#define NUM_RANKS 13
#define NUM_SUITS 4
#define NUM_CARDS 5
/* external variables */
bool straight, flush, four, three;
int pairs; /* can be 0, 1, or 2 */
/* prototypes */
void read_cards(int num_in_rank[], int num_in_suit[]);
void analyze_hand(int num_in_rank[], int num_in_suit[]);
void print_result(void);
/**********************************************************
* main: Calls read_cards, analyze_hand, and print_result *
* repeatedly. *
**********************************************************/
int main(void)
{
int num_in_rank[NUM_RANKS];
int num_in_suit[NUM_SUITS];
for (;;) {
read_cards(num_in_rank, num_in_suit);
analyze_hand(num_in_rank, num_in_suit);
print_result();
}
}
/**********************************************************
* read_cards: Reads the cards into the external *
* variables num_in_rank and num_in_suit; *
* checks for bad cards and duplicate cards. *
**********************************************************/
void read_cards(int num_in_rank[], int num_in_suit[])
{
bool card_exists[NUM_RANKS][NUM_SUITS];
char ch, rank_ch, suit_ch;
int rank, suit;
bool bad_card;
int cards_read = 0;
for (rank = 0; rank < NUM_RANKS; rank++) {
num_in_rank[rank] = 0;
for (suit = 0; suit < NUM_SUITS; suit++)
card_exists[rank][suit] = false;
}
for (suit = 0; suit < NUM_SUITS; suit++)
num_in_suit[suit] = 0;
while (cards_read < NUM_CARDS) {
bad_card = false;
printf("Enter a card: ");
rank_ch = getchar();
switch (rank_ch) {
case '0': exit(EXIT_SUCCESS);
case '2': rank = 0; break;
case '3': rank = 1; break;
case '4': rank = 2; break;
case '5': rank = 3; break;
case '6': rank = 4; break;
case '7': rank = 5; break;
case '8': rank = 6; break;
case '9': rank = 7; break;
case 't': case 'T': rank = 8; break;
case 'j': case 'J': rank = 9; break;
case 'q': case 'Q': rank = 10; break;
case 'k': case 'K': rank = 11; break;
case 'a': case 'A': rank = 12; break;
default: bad_card = true;
}
suit_ch = getchar();
switch (suit_ch) {
case 'c': case 'C': suit = 0; break;
case 'd': case 'D': suit = 1; break;
case 'h': case 'H': suit = 2; break;
case 's': case 'S': suit = 3; break;
default: bad_card = true;
}
while ((ch = getchar()) != '\n')
if (ch != ' ') bad_card = true;
if (bad_card)
printf("Bad card; ignored.\n");
else if (card_exists[rank][suit])
printf("Duplicate card; ignored.\n");
else {
num_in_rank[rank]++;
num_in_suit[suit]++;
card_exists[rank][suit] = true;
cards_read++;
}
}
}
/**********************************************************
* analyze_hand: Determines whether the hand contains a *
* straight, a flush, four-of-a-kind, *
* and/or three-of-a-kind; determines the *
* number of pairs; stores the results into *
* the external variables straight, flush, *
* four, three, and pairs. *
**********************************************************/
void analyze_hand(int num_in_rank[], int num_in_suit[])
{
int num_consec = 0;
int rank, suit;
straight = false;
flush = false;
four = false;
three = false;
pairs = 0;
/* check for flush */
for (suit = 0; suit < NUM_SUITS; suit++)
if (num_in_suit[suit] == NUM_CARDS)
flush = true;
/* check for straight */
rank = 0;
while (num_in_rank[rank] == 0) rank++;
for (; rank < NUM_RANKS && num_in_rank[rank] > 0; rank++)
num_consec++;
if (num_consec == NUM_CARDS) {
straight = true;
return;
}
/* check for 4-of-a-kind, 3-of-a-kind, and pairs */
for (rank = 0; rank < NUM_RANKS; rank++) {
if (num_in_rank[rank] == 4) four = true;
if (num_in_rank[rank] == 3) three = true;
if (num_in_rank[rank] == 2) pairs++;
}
}
/**********************************************************
* print_result: Prints the classification of the hand, *
* based on the values of the external *
* variables straight, flush, four, three, *
* and pairs. *
**********************************************************/
void print_result(void)
{
if (straight && flush) printf("Straight flush");
else if (four) printf("Four of a kind");
else if (three &&
pairs == 1) printf("Full house");
else if (flush) printf("Flush");
else if (straight) printf("Straight");
else if (three) printf("Three of a kind");
else if (pairs == 2) printf("Two pairs");
else if (pairs == 1) printf("Pair");
else printf("High card");
printf("\n\n");
}
CH10_3
#include <stdbool.h> /* C99 only */
#include <stdio.h>
#include <stdlib.h>
#define NUM_CARDS 5
#define RANK 0
#define SUIT 1
/* external variables */
int hand[NUM_CARDS][2];
bool straight, flush, four, three;
int pairs; /* can be 0, 1, or 2 */
/* prototypes */
void read_cards(void);
void analyze_hand(void);
void print_result(void);
/**********************************************************
* main: Calls read_cards, analyze_hand, and print_result *
* repeatedly. *
**********************************************************/
int main(void)
{
for (;;) {
read_cards();
analyze_hand();
print_result();
}
}
/**********************************************************
* read_cards: Reads the cards into the external variable *
* hand; checks for bad cards and duplicate *
* cards. *
**********************************************************/
void read_cards(void)
{
char ch, rank_ch, suit_ch;
int i, rank, suit;
bool bad_card, duplicate_card;
int cards_read = 0;
while (cards_read < NUM_CARDS) {
bad_card = false;
printf("Enter a card: ");
rank_ch = getchar();
switch (rank_ch) {
case '0': exit(EXIT_SUCCESS);
case '2': rank = 0; break;
case '3': rank = 1; break;
case '4': rank = 2; break;
case '5': rank = 3; break;
case '6': rank = 4; break;
case '7': rank = 5; break;
case '8': rank = 6; break;
case '9': rank = 7; break;
case 't': case 'T': rank = 8; break;
case 'j': case 'J': rank = 9; break;
case 'q': case 'Q': rank = 10; break;
case 'k': case 'K': rank = 11; break;
case 'a': case 'A': rank = 12; break;
default: bad_card = true;
}
suit_ch = getchar();
switch (suit_ch) {
case 'c': case 'C': suit = 0; break;
case 'd': case 'D': suit = 1; break;
case 'h': case 'H': suit = 2; break;
case 's': case 'S': suit = 3; break;
default: bad_card = true;
}
while ((ch = getchar()) != '\n')
if (ch != ' ') bad_card = true;
if (bad_card) {
printf("Bad card; ignored.\n");
continue;
}
duplicate_card = false;
for (i = 0; i < cards_read; i++)
if (hand[i][RANK] == rank && hand[i][SUIT] == suit) {
printf("Duplicate card; ignored.\n");
duplicate_card = true;
break;
}
if (!duplicate_card) {
hand[cards_read][RANK] = rank;
hand[cards_read][SUIT] = suit;
cards_read++;
}
}
}
/**********************************************************
* analyze_hand: Determines whether the hand contains a *
* straight, a flush, four-of-a-kind, *
* and/or three-of-a-kind; determines the *
* number of pairs; stores the results into *
* the external variables straight, flush, *
* four, three, and pairs. *
**********************************************************/
void analyze_hand(void)
{
int rank, suit, card, pass, run;
straight = true;
flush = true;
four = false;
three = false;
pairs = 0;
/* sort cards by rank */
for (pass = 1; pass < NUM_CARDS; pass++)
for (card = 0; card < NUM_CARDS - pass; card++) {
rank = hand[card][RANK];
suit = hand[card][SUIT];
if (hand[card + 1][RANK] < rank) {
hand[card][RANK] = hand[card + 1][RANK];
hand[card][SUIT] = hand[card + 1][SUIT];
hand[card + 1][RANK] = rank;
hand[card + 1][SUIT] = suit;
}
}
/* check for flush */
suit = hand[0][SUIT];
for (card = 1; card < NUM_CARDS; card++)
if (hand[card][SUIT] != suit)
flush = false;
/* check for straight */
for (card = 0; card < NUM_CARDS - 1; card++)
if (hand[card][RANK] + 1 != hand[card + 1][RANK])
straight = false;
/* check for 4-of-a-kind, 3-of-a-kind, and pairs by
looking for "runs" of cards with identical ranks */
card = 0;
while (card < NUM_CARDS) {
rank = hand[card][RANK];
run = 0;
do {
run++;
card++;
} while (card < NUM_CARDS && hand[card][RANK] == rank);
switch (run) {
case 2: pairs++; break;
case 3: three = true; break;
case 4: four = true; break;
}
}
}
/**********************************************************
* print_result: Prints the classification of the hand, *
* based on the values of the external *
* variables straight, flush, four, three, *
* and pairs. *
**********************************************************/
void print_result(void)
{
if (straight && flush) printf("Straight flush");
else if (four) printf("Four of a kind");
else if (three &&
pairs == 1) printf("Full house");
else if (flush) printf("Flush");
else if (straight) printf("Straight");
else if (three) printf("Three of a kind");
else if (pairs == 2) printf("Two pairs");
else if (pairs == 1) printf("Pair");
else printf("High card");
printf("\n\n");
}
CH10_4
#include <stdbool.h> /* C99 only */
#include <stdio.h>
#include <stdlib.h>
#define NUM_RANKS 13
#define NUM_SUITS 4
#define NUM_CARDS 5
/* external variables */
bool straight, flush, four, three, royal_flush;
int pairs; /* can be 0, 1, or 2 */
/* prototypes */
void read_cards(int hand[5][2]);
void analyze_hand(int hand[5][2]);
void print_result(void);
bool check_for_duplicate_card(int rank, int suit, int hand[5][2], int cards_read);
/**********************************************************
* main: Calls read_cards, analyze_hand, and print_result *
* repeatedly. *
**********************************************************/
int main(void)
{
int hand[5][2];
for (;;) {
read_cards(hand);
analyze_hand(hand);
print_result();
}
}
/**********************************************************
* read_cards: Reads the cards into the external *
* variables num_in_rank and num_in_suit; *
* checks for bad cards and duplicate cards. *
**********************************************************/
void read_cards(int hand[5][2])
{
char ch, rank_ch, suit_ch;
int rank, suit;
bool bad_card;
int cards_read = 0;
while (cards_read < NUM_CARDS) {
bad_card = false;
printf("Enter a card: ");
rank_ch = getchar();
switch (rank_ch) {
case '0': exit(EXIT_SUCCESS);
case '2': rank = 0; break;
case '3': rank = 1; break;
case '4': rank = 2; break;
case '5': rank = 3; break;
case '6': rank = 4; break;
case '7': rank = 5; break;
case '8': rank = 6; break;
case '9': rank = 7; break;
case 't': case 'T': rank = 8; break;
case 'j': case 'J': rank = 9; break;
case 'q': case 'Q': rank = 10; break;
case 'k': case 'K': rank = 11; break;
case 'a': case 'A': rank = 12; break;
default: bad_card = true;
}
suit_ch = getchar();
switch (suit_ch) {
case 'c': case 'C': suit = 0; break;
case 'd': case 'D': suit = 1; break;
case 'h': case 'H': suit = 2; break;
case 's': case 'S': suit = 3; break;
default: bad_card = true;
}
while ((ch = getchar()) != '\n')
if (ch != ' ') bad_card = true;
if (bad_card)
printf("Bad card; ignored.\n");
else if (check_for_duplicate_card(rank, suit, hand, cards_read))
printf("Duplicate card; ignored.\n");
else {
hand[cards_read][0] = rank;
hand[cards_read][1] = suit;
cards_read++;
}
}
}
bool check_for_duplicate_card(int rank, int suit, int hand[5][2], int cards_read)
{
int i;
for (i = 0; i < cards_read; i++)
if (hand[i][0] == rank && hand[i][1] == suit)
return true;
return false;
}
/**********************************************************
* analyze_hand: Determines whether the hand contains a *
* straight, a flush, four-of-a-kind, *
* and/or three-of-a-kind; determines the *
* number of pairs; stores the results into *
* the external variables straight, flush, *
* four, three, and pairs. *
**********************************************************/
void analyze_hand(int hand[5][2])
{
int num_consec = 0;
int card, rank, suit;
int i, j, smallest;
straight = false;
flush = false;
four = false;
three = false;
pairs = 0;
royal_flush = false;
/* Sort the cards by rank via selection sort*/
for (i = 0; i < NUM_CARDS; i++) {
smallest = i;
for (j = i + 1; j < NUM_CARDS; j++) {
if (hand[j][0] < hand[smallest][0])
smallest = j;
}
rank = hand[i][0];
suit = hand[i][1];
hand[i][0] = hand[smallest][0];
hand[i][1] = hand[smallest][1];
hand[smallest][0] = rank;
hand[smallest][1] = suit;
}
/* check for flush */
for (card = 1; card < NUM_CARDS; card++) {
if (hand[card][1] != hand[0][1])
break;
if (card == NUM_CARDS - 1)
flush = true;
}
/* check for straight */
for (card = 1; card < NUM_CARDS; card++) {
if (hand[card][0] - hand[card - 1][0] != 1)
break;
if (card == NUM_CARDS - 1)
straight = true;
}
/* Check for pairs, three of a kind, and four of a kind in the hand
* by checking for matches to card i*/
int matches;
for (i = 0; i < NUM_CARDS; i++) {
matches = 0;
for (j = i + 1; j < NUM_CARDS; j++) {
if (hand[j][0] == hand[i][0])
matches++;
}
switch (matches) {
case 1: pairs++;
break;
case 2: three = true;
break;
case 3: four = true;
break;
}
}
/* Checks for a royal flush
* first card must be rank 8 (number 10) for royal flush to be a possibility */
if (hand[0][0] == 8 && straight && flush)
royal_flush = true;
}
/**********************************************************
* print_result: Prints the classification of the hand, *
* based on the values of the external *
* variables straight, flush, four, three, *
* and pairs. *
**********************************************************/
void print_result(void)
{
if (royal_flush) printf("Royal flush");
else if (straight && flush) printf("Straight flush");
else if (four) printf("Four of a kind");
else if (three &&
pairs == 1) printf("Full house");
else if (flush) printf("Flush");
else if (straight) printf("Straight");
else if (three) printf("Three of a kind");
else if (pairs == 2) printf("Two pairs");
else if (pairs == 1) printf("Pair");
else printf("High card");
printf("\n\n");
}
CH10_5
#include <stdbool.h> /* C99 only */
#include <stdio.h>
#include <stdlib.h>
#define NUM_RANKS 13
#define NUM_SUITS 4
#define NUM_CARDS 5
/* external variables */
int num_in_rank[NUM_RANKS];
int num_in_suit[NUM_SUITS];
bool straight, flush, four, three;
int pairs; /* can be 0, 1, or 2 */
/* prototypes */
void read_cards(void);
void analyze_hand(void);
void print_result(void);
/**********************************************************
* main: Calls read_cards, analyze_hand, and print_result *
* repeatedly. *
**********************************************************/
int main(void)
{
for (;;) {
read_cards();
analyze_hand();
print_result();
}
}
/**********************************************************
* read_cards: Reads the cards into the external *
* variables num_in_rank and num_in_suit; *
* checks for bad cards and duplicate cards. *
**********************************************************/
void read_cards(void)
{
bool card_exists[NUM_RANKS][NUM_SUITS];
char ch, rank_ch, suit_ch;
int rank, suit;
bool bad_card;
int cards_read = 0;
for (rank = 0; rank < NUM_RANKS; rank++) {
num_in_rank[rank] = 0;
for (suit = 0; suit < NUM_SUITS; suit++)
card_exists[rank][suit] = false;
}
for (suit = 0; suit < NUM_SUITS; suit++)
num_in_suit[suit] = 0;
while (cards_read < NUM_CARDS) {
bad_card = false;
printf("Enter a card: ");
rank_ch = getchar();
switch (rank_ch) {
case '0': exit(EXIT_SUCCESS);
case '2': rank = 0; break;
case '3': rank = 1; break;
case '4': rank = 2; break;
case '5': rank = 3; break;
case '6': rank = 4; break;
case '7': rank = 5; break;
case '8': rank = 6; break;
case '9': rank = 7; break;
case 't': case 'T': rank = 8; break;
case 'j': case 'J': rank = 9; break;
case 'q': case 'Q': rank = 10; break;
case 'k': case 'K': rank = 11; break;
case 'a': case 'A': rank = 12; break;
default: bad_card = true;
}
suit_ch = getchar();
switch (suit_ch) {
case 'c': case 'C': suit = 0; break;
case 'd': case 'D': suit = 1; break;
case 'h': case 'H': suit = 2; break;
case 's': case 'S': suit = 3; break;
default: bad_card = true;
}
while ((ch = getchar()) != '\n')
if (ch != ' ') bad_card = true;
if (bad_card)
printf("Bad card; ignored.\n");
else if (card_exists[rank][suit])
printf("Duplicate card; ignored.\n");
else {
num_in_rank[rank]++;
num_in_suit[suit]++;
card_exists[rank][suit] = true;
cards_read++;
}
}
}
/**********************************************************
* analyze_hand: Determines whether the hand contains a *
* straight, a flush, four-of-a-kind, *
* and/or three-of-a-kind; determines the *
* number of pairs; stores the results into *
* the external variables straight, flush, *
* four, three, and pairs. *
**********************************************************/
void analyze_hand(void)
{
int num_consec = 0;
int rank, suit;
straight = false;
flush = false;
four = false;
three = false;
pairs = 0;
/* check for flush */
for (suit = 0; suit < NUM_SUITS; suit++)
if (num_in_suit[suit] == NUM_CARDS)
flush = true;
/* check for straight */
rank = 0;
while (num_in_rank[rank] == 0) rank++;
for (; rank < NUM_RANKS && num_in_rank[rank] > 0; rank++)
num_consec++;
if (num_consec == NUM_CARDS) {
straight = true;
return;
}
/* check for ace-low straight */
if (num_consec == NUM_CARDS - 1 &&
num_in_rank[0] > 0 && num_in_rank[NUM_RANKS - 1] > 0) {
straight = true;
return;
}
/* check for 4-of-a-kind, 3-of-a-kind, and pairs */
for (rank = 0; rank < NUM_RANKS; rank++) {
if (num_in_rank[rank] == 4) four = true;
if (num_in_rank[rank] == 3) three = true;
if (num_in_rank[rank] == 2) pairs++;
}
}
/**********************************************************
* print_result: Prints the classification of the hand, *
* based on the values of the external *
* variables straight, flush, four, three, *
* and pairs. *
**********************************************************/
void print_result(void)
{
if (straight && flush) printf("Straight flush");
else if (four) printf("Four of a kind");
else if (three &&
pairs == 1) printf("Full house");
else if (flush) printf("Flush");
else if (straight) printf("Straight");
else if (three) printf("Three of a kind");
else if (pairs == 2) printf("Two pairs");
else if (pairs == 1) printf("Pair");
else printf("High card");
printf("\n\n");
}
CH10_6
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define STACK_SIZE 100
int contents[STACK_SIZE];
int top = 0;
void make_empty(void);
int stack_overflow(void);
int stack_underflow(void);
bool is_empty(void);
bool is_full(void);
void push(int i);
int pop(void);
int main(void)
{
char ch;
int m, n;
make_empty();
while (1) {
printf("Enter an RPN expression: ");
while ((ch = getchar()) != '=') {
switch (ch) {
case '0': push(0); break;
case '1': push(1); break;
case '2': push(2); break;
case '3': push(3); break;
case '4': push(4); break;
case '5': push(5); break;
case '6': push(6); break;
case '7': push(7); break;
case '8': push(8); break;
case '9': push(9); break;
//引入变量m,n;可以调节出栈元素运算顺序;若直接 push(pop() + pop());
//对于减法和除法会产生运算错误
case '+': m = pop(); n = pop(); push(n + m); break;
case '-': m = pop(); n = pop(); push(n - m); break;
case '*': m = pop(); n = pop(); push(n * m); break;
case '/': m = pop(); n = pop(); push(n / m); break;
case ' ':; break;
default: printf("END\n"); return 0; break;
}
}
printf("%d\n\n", pop());
getchar(); //扫走输入一次的回车
}
return 0;
}
int stack_overflow(void)
{
printf("Stack overflow\n");
exit(EXIT_FAILURE);
}
int stack_underflow(void)
{
printf("Stack underflow\n");
exit(EXIT_FAILURE);
}
void make_empty(void)
{
top = 0;
}
bool is_empty(void)
{
return top == 0;
}
bool is_full(void)
{
return top == STACK_SIZE;
}
void push(int i)
{
if (is_full()) {
stack_overflow();
}
else {
contents[top++] = i;
}
}
int pop(void)
{
if (is_empty()) {
stack_underflow();
}
else {
return contents[--top];
}
}
CH10_7
#include <stdio.h>
#define MAX_DIGITS 10
char digits[3][4 * MAX_DIGITS];
const int segments[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, /* 0 */
{0, 1, 1, 0, 0, 0, 0}, /* 1 */
{1, 1, 0, 1, 1, 0, 1}, /* 2 */
{1, 1, 1, 1, 0, 0, 1}, /* 3 */
{0, 1, 1, 0, 0, 1, 1}, /* 4 */
{1, 0, 1, 1, 0, 1, 1}, /* 5 */
{1, 0, 1, 1, 1, 1, 1}, /* 6 */
{1, 1, 1, 0, 0, 0, 0}, /* 7 */
{1, 1, 1, 1, 1, 1, 1}, /* 8 */
{1, 1, 1, 1, 0, 1, 1}, /* 9 */
};
void clear_digits_array(void);
void process_digit(int digit, int position);
void print_digits_array(void);
int main(void)
{
char ch;
int n = 0;
clear_digits_array();
printf("Enter a number: ");
while ((ch = getchar()) != '\n' && n<10) {
if (ch >= '0' && ch <= '9') {
process_digit(ch-'0', n);
n++;
}
}
print_digits_array();
return 0;
}
void clear_digits_array(void)
{
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4 * MAX_DIGITS; j++) {
digits[i][j] = ' ';
}
}
}
void process_digit(int digit, int position)
{
for (int i = 0; i < 7; i++) {
if (segments[digit][i] == 1) {
switch (i) {
case 0: digits[0][1 + 4 * position] = (i % 3 == 0 ? '_' : '|'); break;
case 1: digits[1][2 + 4 * position] = (i % 3 == 0 ? '_' : '|'); break;
case 2: digits[2][2 + 4 * position] = (i % 3 == 0 ? '_' : '|'); break;
case 3: digits[2][1 + 4 * position] = (i % 3 == 0 ? '_' : '|'); break;
case 4: digits[2][0 + 4 * position] = (i % 3 == 0 ? '_' : '|'); break;
case 5: digits[1][0 + 4 * position] = (i % 3 == 0 ? '_' : '|'); break;
case 6: digits[1][1 + 4 * position] = (i % 3 == 0 ? '_' : '|'); break;
}
}
}
}
void print_digits_array(void)
{
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4 * MAX_DIGITS; j++) {
printf("%c", digits[i][j]);
}
printf("\n");
}
}