形式化算式
【题目描述】我们有如下形式化的数字:
* *** *** * * *** *** *** *** *** ***
* * * * * * * * * * * * * *
* *** *** *** *** *** * *** *** * *
* * * * * * * * * * * * *
* *** *** * *** *** * *** *** ***
分别表示 1 2 3 4 5 6 7 8 9 0
有如下形式化的符号:
* * * * ****
*** *** * *
* * * * **** **
**
分别表示 + - * / = 小数点
现在 将输入一个算式
你要将该算式计算之后按照上述形式化的方式输出
各个数字和符号之间空两格
无法整除则保留两位小数
样例输入1:
10 + 31
样例输出1:
* *** *** * * * *
* * * * * * **** * * *
* * * *** *** * *** *
* * * * * * **** * *
* *** *** * * *
样例输入2:
2 / 5
样例输出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; }