//模拟题 //将每个数字从上到下划分成5个部分,将打印分为5种类型 //1:空白 2:- 3:左| 4:右| 5:| |两竖,同时设置5个部分的打印接口 //接着LCD数组存放这个每个数字每个部分的打印类型 #include<iostream> using namespace std; int S,N,len; int data[10]; int LCD[10][5] = {1,4,0,4,1, 0,3,0,3,0, 1,3,1,2,1, 1,3,1,3,1, 0,4,1,3,0, 1,2,1,3,1, 1,2,1,4,1, 1,3,0,3,0, 1,4,1,4,1, 1,4,1,3,1}; void print(int n,int type) { if(type == 0)//empty { for(int i = 0;i < n + 2;++i) printf(" "); } else if(type == 1)// - { printf(" "); for(int i = 0;i < n;++i) printf("-"); printf(" "); } else if(type == 2)// |(left) { printf("|"); for(int i = 0;i < n + 1;++i) printf(" "); } else if(type == 3)// |(right) { for(int i = 0;i < n + 1;++i) printf(" "); printf("|"); } else if(type == 4)// | |(double) { printf("|"); for(int i = 0;i < n;++i) printf(" "); printf("|"); } } int calBit(int N)//计算数字的位数长度 { if(N == 0) return 1;//注意N等于0的特殊计数情况 int cnt = 0; while(N != 0) { N /= 10; ++cnt; } return cnt; } void readData(int N) { len = calBit(N); for(int i = len;i >= 1;--i) { data[i] = N % 10; N /= 10; } } void work(int N) { readData(N); for(int part = 0;part < 5;++part) { if(part == 0 || part == 2 || part == 4) { for(int i = 1;i <= len;++i) { print(S,LCD[data[i]][part]); if(i != len) printf(" "); } printf("/n"); } else if(part == 1 || part == 3) { for(int row = 0;row < S;++row) { for(int j = 1;j <= len;++j) { print(S,LCD[data[j]][part]); if(j != len) printf(" "); } printf("/n"); } } } } int main() { bool first = 1; while(scanf("%d%d",&S,&N) && S) { if(!first) printf("/n"); else first = 0; work(N); } return 0; }