首页 > 试题广场 >

形式化算式

[问答题]

形式化算式

题目描述我们有如下形式化的数字:

*    ***   ***   * *   ***   ***   ***   ***   ***   ***

*      *     *   * *   *     *       *   * *   * *   * *

*    ***   ***   ***   ***   ***     *   ***   ***   * *

*    *       *     *     *   * *     *   * *     *   * *

*    ***   ***     *   ***   ***     *   ***   ***   ***

分别表示 1 2 3 4 5 6 7 8 9 0

有如下形式化的符号:

*        * *    *   ****

***  ***   *    *

*        * *  *     ****   **

**

分别表示 + - *= 小数点

现在 将输入一个算式

你要将该算式计算之后按照上述形式化的方式输出

各个数字和符号之间空两格

无法整除则保留两位小数

样例输入1

10 + 31

样例输出1

*  ***       ***  *        * *  *

*  * *   *     *  *  ****  * *  *

*  * *  ***  ***  *        ***  *

*  * *   *     *  *  ****    *  *

*  ***       ***  *          *  *

样例输入2

25

样例输出2

***       ***        ***      * *

*    *  *    ****  * *      * *

***   *   ***        * *      ***

*    *      *  ****  * *  **    *

***       ***        ***  **    *

数据范围:

20%的数据 输入的数字和运算结果都是个位数

100%的数据保证 输入数字和答案都小于10000

100%的数据保证 输入数字不会出现小数

80%的数据保证 运算结果不会出现小数

推荐
#include <bits/stdc++.h>
using namespace std;
string digit[10][5];
string opr[6][5];
 
void init() {
    digit[0][0] = "***";
    digit[0][1] = "* *";
    digit[0][2] = "* *";
    digit[0][3] = "* *";
    digit[0][4] = "***";
 
    digit[1][0] = "*";
    digit[1][1] = "*";
    digit[1][2] = "*";
    digit[1][3] = "*";
    digit[1][4] = "*";
 
    digit[2][0] = "***";
    digit[2][1] = "  *";
    digit[2][2] = "***";
    digit[2][3] = "*  ";
    digit[2][4] = "***";
 
    digit[3][0] = "***";
    digit[3][1] = "  *";
    digit[3][2] = "***";
    digit[3][3] = "  *";
digit[3][4] = "***";
 
    digit[4][0] = "* *";
    digit[4][1] = "* *";
    digit[4][2] = "***";
    digit[4][3] = "  *";
    digit[4][4] = "  *";
 
    digit[5][0] = "***";
    digit[5][1] = "*  ";
    digit[5][2] = "***";
    digit[5][3] = "  *";
    digit[5][4] = "***";
 
    digit[6][0] = "***";
    digit[6][1] = "*  ";
    digit[6][2] = "***";
    digit[6][3] = "* *";
    digit[6][4] = "***";
 
    digit[7][0] = "***";
    digit[7][1] = "  *";
    digit[7][2] = "  *";
    digit[7][3] = "  *";
    digit[7][4] = "  *";
 
    digit[8][0] = "***";
    digit[8][1] = "* *";
    digit[8][2] = "***";
    digit[8][3] = "* *";
    digit[8][4] = "***";
 
    digit[9][0] = "***";
    digit[9][1] = "* *";
    digit[9][2] = "***";
    digit[9][3] = "  *";
    digit[9][4] = "***";
 
    opr[0][0] = "   ";
    opr[0][1] = " * ";
    opr[0][2] = "***";
    opr[0][3] = " * ";
    opr[0][4] = "   ";
 
    opr[1][0] = "   ";
    opr[1][1] = "   ";
    opr[1][2] = "***";
    opr[1][3] = "   ";
    opr[1][4] = "   ";
 
    opr[2][0] = "   ";
    opr[2][1] = "* *";
    opr[2][2] = " * ";
    opr[2][3] = "* *";
    opr[2][4] = "   ";
 
    opr[3][0] = "   ";
    opr[3][1] = "  *";
    opr[3][2] = " * ";
    opr[3][3] = "*  ";
    opr[3][4] = "   ";
 
    opr[4][0] = "    ";
    opr[4][1] = "****";
    opr[4][2] = "    ";
    opr[4][3] = "****";
    opr[4][4] = "    ";
 
    opr[5][0] = "  ";
    opr[5][1] = "  ";
    opr[5][2] = "  ";
    opr[5][3] = "**";
    opr[5][4] = "**";
 
}
 
void print_num(int x, int p) {   
    int dig[10], idx = 0;
    do {
       dig[idx++] = x % 10;
       x /= 10;
    } while (x);
 
    for (int i = idx-1; i >= 0; --i) {
        cout << digit[ dig[i] ][p];
        if (i) cout << "  ";
    }
}
 
void print_double(double x, int p) {   // 输出数字x的第p行
    int x1 = x;
    int x2 = ceil((x - x1) * 100);
 
    int dig[10], idx = 0;
    do {
       dig[idx++] = x1 % 10;
       x1 /= 10;
    } while (x1);
 
    for (int i = idx-1; i >= 0; --i) {
        cout << digit[ dig[i] ][p];
        cout << "  ";
    }
    cout << opr[5][p];
    cout << "  ";
    cout << digit[ x2 / 10 ][p];
    if (x2 % 10 != 0) {
        cout << "  ";
        cout << digit[ x2 % 10 ][p];
    }
}
 
int main() {
    int a, b, ans;
    char op;
    init();
    scanf("%d%*c%c%*c%d", &a, &op, &b);
    if (op == '+') {
        ans = a + b;
        for (int i = 0; i < 5; ++i) {
            print_num(a, i);
            printf(" ");
            printf(" ");
            cout << opr[0][i];
            printf(" ");
            printf(" ");
            print_num(b, i);
            printf(" ");
            printf(" ");
            cout << opr[4][i];
            printf(" ");
            printf(" ");
            print_num(ans, i);
            printf("\n");
        }
    } else if (op == '-') {
        ans = a - b; bool mi = false;
        if (ans < 0) mi = true, ans = -ans;
        for (int i = 0; i < 5; ++i) {
            print_num(a, i);
            printf(" ");
            printf(" ");
            cout << opr[1][i];
            printf(" ");
            printf(" ");
            print_num(b, i);
            printf(" ");
            printf(" ");
            cout << opr[4][i];
            printf(" ");
            printf(" ");
 
            if (mi) {
                cout << opr[1][i];
                printf(" ");
                printf(" ");
            }
 
            print_num(ans, i);
            printf("\n");
        }
    } else if (op == '*') {
        ans = a * b;
        for (int i = 0; i < 5; ++i) {
            print_num(a, i);
            printf(" ");
            printf(" ");
            cout << opr[2][i];
            printf(" ");
            printf(" ");
            print_num(b, i);
            printf(" ");
            printf(" ");
            cout << opr[4][i];
            printf(" ");
            printf(" ");
            print_num(ans, i);
            printf("\n");
        }
    } else {
        if (a % b == 0) {
            ans = a / b;
            for (int i = 0; i < 5; ++i) {
                print_num(a, i);
                printf(" ");
                printf(" ");
                cout << opr[3][i];
                printf(" ");
                printf(" ");
                print_num(b, i);
                printf(" ");
                printf(" ");
                cout << opr[4][i];
                printf(" ");
                printf(" ");
                print_num(ans, i);
                printf("\n");
            }
        } else {
            double fans = (double)a / b;
            for (int i = 0; i < 5; ++i) {
                print_num(a, i);
                printf(" ");
                printf(" ");
                cout << opr[3][i];
                printf(" ");
                printf(" ");
                print_num(b, i);
                printf(" ");
                printf(" ");
                cout << opr[4][i];
                printf(" ");
                printf(" ");
                print_double(fans, i);
                printf("\n");
            }
        }
    }
    return 0;
}

编辑于 2017-07-28 16:52:10 回复(0)