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;
}