你的一个朋友买了一台电脑。他以前只用过计算器,因为电脑的显示器上显示的数字的样子和计算器是不一样,所以当他使用电脑的时候会比较郁闷。为了帮助他,你决定写一个程序把在电脑上的数字显示得像计算器上一样。 输入描述: 输入包含多组数据,每组数据包含两个整数s(1≤s≤10)和n(1≤n≤99999999)。其中n 是要显示的数,s 是要显示的数的尺寸。 输出描述: 显示的方式是:用 s 个“-”表示一个水平线段,用s 个“|”表示一个垂直线段。这种情况下,每一个数字需要占用s+2 列和2s+3 行。另外,在两个数字之间要输出一个空白的列。每组数据之后输出一个空行作为分隔。注意:输出中空白的地方都要用空格来填充。 输入例子: 2 123453 67890 输出例子: -- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- ---
将输出屏幕上的位置映射到最基本3*5区域内的字符的位置,然后逐行打印即可。
#include
#include
#include
#include
using namespace std;
charnums[10][5][3] =
{
{
{' ','-',' '},
{'|',' ','|'},
{' ',' ',' '},
{'|',' ','|'},
{' ','-',' '}
}, // 0
{
{' ',' ',' '},
{' ',' ','|'},
{' ',' ',' '},
{' ',' ','|'},
{' ',' ',' '}
}, // 1
{
{' ','-',' '},
{' ',' ','|'},
{' ','-',' '},
{'|',' ',' '},
{' ','-',' '}
}, // 2
{
{' ','-',' '},
{' ',' ','|'},
{' ','-',' '},
{' ',' ','|'},
{' ','-',' '}
}, // 3
{
{' ',' ',' '},
{'|',' ','|'},
{' ','-',' '},
{' ',' ','|'},
{' ',' ',' '}
}, // 4
{
{' ','-',' '},
{'|',' ',' '},
{' ','-',' '},
{' ',' ','|'},
{' ','-',' '}
}, // 5
{
{' ','-',' '},
{'|',' ',' '},
{' ','-',' '},
{'|',' ','|'},
{' ','-',' '}
}, // 6
{
{' ','-',' '},
{' ',' ','|'},
{' ',' ',' '},
{' ',' ','|'},
{' ',' ',' '}
}, // 7
{
{' ','-',' '},
{'|',' ','|'},
{' ','-',' '},
{'|',' ','|'},
{' ','-',' '}
}, //8
{
{' ','-',' '},
{'|',' ','|'},
{' ','-',' '},
{' ',' ','|'},
{' ','-',' '}
} // 9
};
inline voidprintNumberN(string &num,intrep)
{
// 计算输出区域的高度与宽度
intheight = rep*2+ 3; // 高度
intnumWidth = rep + 2; // 单个数字占据的宽度
intwidth = num.size()*numWidth + num.size() - 1; //整个输出区域的宽度
for(inti = 0; i < height; i++)
{
for(intj = 0; j < width; j++)
{
intno = j/(numWidth+1); //计算no确定输出哪个数字了。
intnumsNo = num.at(no) - '0'; // 转换为对应的数组的编号。
/*
行映射规则: 将第i行映射到nums对应行的位置
0映射到0行
1 - rep 映射到 第1行
rep + 1 映射到 第2行
rep + 2 - rep + 1 + rep 映射到第3行
rep*2 + 2 映射到第 4行
列映射规则:
第0列映射到第零列,
第1到rep列映射到第一列,
第rep+1列映射到第二列
*/
intx,y; //x表示映射的行,y表示映射到的列
intyMap = j%(numWidth+1);
if(yMap == numWidth)
{
// 打印空格
x = 0;
y = 0;
}
else
{
if(yMap == 0)
{
y = 0;
}
elseif(yMap >= 1&& yMap <= rep)
{
y = 1;
}
elseif(yMap == rep + 1)
{
y = 2;
}
if(i == 0)
{
x = 0;
} // 打印0行内容,列号为j%numWidth+1
elseif(i >= 1&& i <= rep)
{
x = 1;
} // 打印第nums对应的第1行
elseif(i == rep + 1)
{
x = 2;
}
elseif(i >= rep + 2&& i <= rep*2+ 1)
{
x = 3;
}
elseif(i == rep*2+ 2)
{
x = 4;
}
}
printf("%c",nums[numsNo][x][y]);
} // 这个区域输出所有数字,通过no定位数字的位置
printf("\n");
} // 在这块区域上输出字符,输出过程中将字符位置转换为输出屏幕上的位置。
}
intmain()
{
// 1 输入以string来输入
string num;
intn;
while(cin >> n >> num)
{
//cout<< n <<" "
< printNumberN(num,n); printf("\n"); } return0; }