每天一個小題目——計算器的新功能
阿新 • • 發佈:2019-01-08
題目描述:
當你學一些視覺化程式設計語言時,老師經常會讓你設計並且程式設計做出一個計算器,這時也許你會仿照windows系統自帶的計算器外觀和功能去設計,但是現在老師要你多做出一個有新功能的計算器,實現當輸入一個數時,能夠將這個數分解成一個或多個素因子乘積的形式,並按素因子的大小排列顯示出來。大家對計算器中數的表示應該很清楚的。下面顯示出了0 — 9這十個數字的表示形式。每個數字都佔據5 * 3大小的字元區域
你能實現這個新功能嗎?試試看吧!
程式碼如下:(程式碼是拷過來的)
#include <iostream>
#include <cstdio>
using namespace std;
char arr[5][1000];
int pos = 0; // 列標
void printMultiSign() {
if (pos != 0) {
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = '*';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
}
}
void printNumToArray(int num) {
int tmp = 1;
while (num / tmp / 10 != 0) { // 確定 num 即每一個 素因子的位數
tmp *= 10;
};
printMultiSign(); // 新增 * 連線 兩個素因子
while (tmp != 0) {
int t = num / tmp % 10;
tmp = tmp / 10;
switch (t) { // 顯示每個數字
case 0 :
arr[0][pos] = ' ' ;
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = '-';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 1 :
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 2 :
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = '-';
arr[3][pos] = ' ';
arr[4][pos++] = '-';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
break;
case 3 :
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = '-';
arr[3][pos] = ' ';
arr[4][pos++] = '-';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 4 :
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = '-';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 5 :
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = '-';
arr[3][pos] = ' ';
arr[4][pos++] = '-';
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 6 :
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = '-';
arr[3][pos] = ' ';
arr[4][pos++] = '-';
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 7 :
arr[0][pos] = ' ';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 8 :
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = '-';
arr[3][pos] = ' ';
arr[4][pos++] = '-';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
case 9 :
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = ' ';
arr[4][pos++] = ' ';
arr[0][pos] = '-';
arr[1][pos] = ' ';
arr[2][pos] = '-';
arr[3][pos] = ' ';
arr[4][pos++] = '-';
arr[0][pos] = ' ';
arr[1][pos] = '|';
arr[2][pos] = ' ';
arr[3][pos] = '|';
arr[4][pos++] = ' ';
break;
}
}
}
void printArray() { // 設定結束符
arr[0][pos] = '\0';
arr[1][pos] = '\0';
arr[2][pos] = '\0';
arr[3][pos] = '\0';
arr[4][pos] = '\0';
pos = 0;
cout << arr[0] << endl;
cout << arr[1] << endl;
cout << arr[2] << endl;
cout << arr[3] << endl;
cout << arr[4] << endl;
}
void generate(int num) {
for (int i = 2; i <= num;) {
if (num % i == 0) {
printNumToArray(i);
num = num / i;
i = 2;
} else {
++i;
}
}
}
int main()
{
int num = 0;
while (scanf("%d", &num) != EOF) {
generate(num);
printArray();
}
return 0;
}