1.最终显示的的列为(s+2)*w。
2.计算有多少位的时候要考虑输入0的情况。
3.pow()返回的是double类型。
4.考虑最后一列不输出空格。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include<memory.h>
#define MAXN 8
#define MAXL 12*MAXN
#define MAXR 23
int main()
{
char LCD[MAXR][MAXL];//显示字符
int s;//显示的大小
int i;//计数
int j;
int w;//数字的位数
int n;//显示的数字
int num;//保存当前位数字
while (~scanf("%d%d", &s, &n)
&&(s!=0||n!=0))
{
memset(LCD, '\0' ,sizeof(LCD));
i=0;
j=0;
while ((n/(int)pow(10, i++))!=0)//计算多少位
{
}
w = i -1;
if (n==0)
{
w = 1;
}
for (i = 0; i < w; i++)
{
num=(n/(int)pow(10,w-i-1))%10;//当前位数字大小
switch (num)
{
case 1:
{
for(j = 0; j < s;j++)
{
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 2:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[s+1][i*(s+2)+j+1] = '-';//中间行的横
LCD[2*s+2][i*(s+2)+j+1] = '-';//最后行的横
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][i*(s+2)] = '|';//第一列下半边的竖
}
break;
}
case 3:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[s+1][i*(s+2)+j+1] = '-';//中间行的横
LCD[2*s+2][i*(s+2)+j+1] = '-';//最后行的横
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 4:
{
for(j = 0; j < s;j++)
{
LCD[s+1][i*(s+2)+j+1] = '-';//中间行的横
LCD[j+1][i*(s+2)] = '|';//第一列上半边的竖
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 5:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[j+1][i*(s+2)] = '|';//第一列上半边的竖
LCD[s+1][i*(s+2)+j+1] = '-';//中间行的横
LCD[2*s+2][i*(s+2)+j+1] = '-';//最后行的横
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 6:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[j+1][i*(s+2)] = '|';//第一列上半边的竖
LCD[s+1][i*(s+2)+j+1] = '-';//中间行的横
LCD[2*s+2][i*(s+2)+j+1] = '-';//最后行的横
LCD[2*s+3-j-2][i*(s+2)] = '|';//第一列下半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 7:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 8:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[j+1][i*(s+2)] = '|';//第一列上半边的竖
LCD[s+1][i*(s+2)+j+1] = '-';//中间行的横
LCD[2*s+2][i*(s+2)+j+1] = '-';//最后行的横
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][i*(s+2)] = '|';//第一列下半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 9:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[j+1][i*(s+2)] = '|';//第一列上半边的竖
LCD[s+1][i*(s+2)+j+1] = '-';//中间行的横
LCD[2*s+2][i*(s+2)+j+1] = '-';//最后行的横
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
case 0:
{
for(j = 0; j < s;j++)
{
LCD[0][i*(s+2)+j+1] = '-';//第一行的横
LCD[j+1][i*(s+2)] = '|';//第一列上半边的竖
LCD[2*s+2][i*(s+2)+j+1] = '-';//最后行的横
LCD[j+1][(i+1)*(s+2)-1] = '|';//第四列上半边的竖
LCD[2*s+3-j-2][i*(s+2)] = '|';//第一列下半边的竖
LCD[2*s+3-j-2][(i+1)*(s+2)-1] = '|';//第四列下半边的竖
}
break;
}
default:
{
break;
}
}
}
for (i = 0; i < 2*s+3; i++)
{
for (j = 0; j < (s+2)*w; j++)
{
if (LCD[i][j]=='\0')
{
LCD[i][j] = ' ';
}
printf("%c", LCD[i][j]);
if (j!=(s+2)*w-1
&&((j+1)%(s+2)==0))
{
printf(" ");
}
}
printf("\n");
}
printf("\n");
}
return 0;
}