经典指数          
原因
3261
浏览数
0
收藏数
 

你的一个朋友买了一台电脑。他以前只用过计算器,因为电脑的显示器上显示的数字的样子和计算器是不一样,所以当他使用电脑的时候会比较郁闷。为了帮助他,你决定写一个程序把在电脑上的数字显示得像计算器上一样。 输入描述: 输入包含多组数据,每组数据包含两个整数s(1≤s≤10)和n(1≤n≤99999999)。其中n 是要显示的数,s 是要显示的数的尺寸。 输出描述: 显示的方式是:用 s 个“-”表示一个水平线段,用s 个“|”表示一个垂直线段。这种情况下,每一个数字需要占用s+2 列和2s+3 行。另外,在两个数字之间要输出一个空白的列。每组数据之后输出一个空行作为分隔。注意:输出中空白的地方都要用空格来填充。 输入例子: 2 123453 67890 输出例子: -- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- | | | | | | | || | | | | | | || | | | | | | | --- --- --- ---

     举报   纠错  
 
切换
1 个答案

将输出屏幕上的位置映射到最基本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;

}

 
切换
撰写答案