-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathP706.cpp
94 lines (91 loc) · 2.69 KB
/
P706.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <string>
int main() {
// Bars of LCD display: top, top-left, top-right, mid, bottom-left, bottom-right, bottom.
int bars0[7] = {1,1,1,0,1,1,1};
int bars1[7] = {0,0,1,0,0,1,0};
int bars2[7] = {1,0,1,1,1,0,1};
int bars3[7] = {1,0,1,1,0,1,1};
int bars4[7] = {0,1,1,1,0,1,0};
int bars5[7] = {1,1,0,1,0,1,1};
int bars6[7] = {1,1,0,1,1,1,1};
int bars7[7] = {1,0,1,0,0,1,0};
int bars8[7] = {1,1,1,1,1,1,1};
int bars9[7] = {1,1,1,1,0,1,1};
int *bars[10] = {bars0,bars1,bars2,bars3,bars4,bars5,bars6,bars7,bars8,bars9};
long s, n;
int digits[9];
while(true) {
// Read and parse input:
std::cin >> s >> n;
if(s == 0 && n == 0)
return 0;
int numDigits = 1;
long downN = n;
while(downN > 9) {
++numDigits;
downN /= 10;
}
for(int i = 0; i < numDigits; ++i) {
digits[numDigits-1-i] = n%10;
n /= 10;
//std::cerr << "Reverse digit " << i << " = " << digits[numDigits-1-i] << std::endl;
}
// Print top - bars:
for(int i = 0; i < numDigits; ++i) {
if(i != 0)
std::cout << " "; // spacing
std::cout << " "; // corner
for(int j = 0; j < s; ++j) // top bar:
std::cout << (bars[digits[i]][0] ? "-" : " ");
std::cout << " "; // corner
}
std::cout << std::endl;
// Print the top | bars:
for(int k = 0; k < s; ++k) {
for(int i = 0; i < numDigits; ++i) {
if(i != 0)
std::cout << " "; // spacing
std::cout << (bars[digits[i]][1] ? "|" : " "); // left bar
for(int j = 0; j < s; ++j) // top bar:
std::cout << " ";
std::cout << (bars[digits[i]][2] ? "|" : " "); // right bar
}
std::cout << std::endl;
}
// Print center - bars:
for(int i = 0; i < numDigits; ++i) {
if(i != 0)
std::cout << " "; // spacing
std::cout << " "; // corner
for(int j = 0; j < s; ++j) // top bar:
std::cout << (bars[digits[i]][3] ? "-" : " ");
std::cout << " "; // corner
}
std::cout << std::endl;
// Print the bottom | bars:
for(int k = 0; k < s; ++k) {
for(int i = 0; i < numDigits; ++i) {
if(i != 0)
std::cout << " "; // spacing
std::cout << (bars[digits[i]][4] ? "|" : " "); // left bar
for(int j = 0; j < s; ++j) // top bar:
std::cout << " ";
std::cout << (bars[digits[i]][5] ? "|" : " "); // right bar
}
std::cout << std::endl;
}
// Print bottom - bars:
for(int i = 0; i < numDigits; ++i) {
if(i != 0)
std::cout << " "; // spacing
std::cout << " "; // corner
for(int j = 0; j < s; ++j) // top bar:
std::cout << (bars[digits[i]][6] ? "-" : " ");
std::cout << " "; // corner
}
std::cout << std::endl;
// After each case:
std::cout << std::endl;
}
}