UVa Problem 706 LC-Display (液晶显示屏)

来源:互联网 发布:mac看电池循环次数 编辑:程序博客网 时间:2024/04/25 17:57
[cpp] view plaincopyprint?
  1. // LC-Display (液晶显示屏)  
  2. // PC/UVa IDs: 110104/706, Popularity: A, Success rate: average Level: 1  
  3. // Verdict: Accepted   
  4. // Submission Date: 2011-04-09  
  5. // UVa Run Time: 0.012s  
  6. //   
  7. // 版权所有(C)2011,邱秋。metaphysis # yeah dot net  
  8.       
  9. #include <iostream>  
  10. #include <cstring>  
  11.       
  12. using namespace std;  
  13.       
  14. #define MAXLENGTH 8  
  15.       
  16. void lcd_display (long size, long number)  
  17. {  
  18.     // 将number拆分为单个的数字。  
  19.     int digits[MAXLENGTH];  
  20.       
  21.     memset (digits, -1, sizeof (digits));  
  22.     if (number == 0)  
  23.         digits[MAXLENGTH - 1] = 0;  
  24.     else  
  25.     {  
  26.         for (int i = MAXLENGTH - 1; number > 0; i--)  
  27.         {  
  28.             digits[i] = number % 10;  
  29.             number /= 10;  
  30.         }  
  31.     }  
  32.       
  33.     // 定义每个数字的关键笔划。  
  34.     string outline[5][10] = {   
  35.         " - ""   "" - "" - ""   "" - "" - "" - "" - "" - ",  
  36.         "| |""  |""  |""  |""| |""|  ""|  ""  |""| |""| |",  
  37.         "   ""   "" - "" - "" - "" - "" - ""   "" - "" - ",  
  38.         "| |""  |""|  ""  |""  |""  |""| |""  |""| |""  |",  
  39.         " - ""   "" - "" - ""   "" - "" - ""   "" - "" - "  
  40.     };  
  41.       
  42.     // 根据指定size将关键笔划扩大显示,实际上就是将关键笔划重复size次。  
  43.     for (int row = 1; row <= (2 * size + 3); row++)  
  44.     {  
  45.         for (int i = 0; i < MAXLENGTH; i++)  
  46.             if (digits[i] != -1)  
  47.             {  
  48.                 string line;  
  49.                 if (row == 1)  
  50.                     line = outline[0][digits[i]];  
  51.                 if (2 <= row && row < (size + 2))  
  52.                     line = outline[1][digits[i]];  
  53.                 if (row == (size + 2))  
  54.                     line = outline[2][digits[i]];  
  55.                 if ((size + 3) <= row && row <= (2 * size + 2))  
  56.                     line = outline[3][digits[i]];  
  57.                 if (row == (2 * size + 3))  
  58.                     line = outline[4][digits[i]];  
  59.       
  60.                 // 输出关键笔划。  
  61.                 cout << line[0];  
  62.                 for (int j = 0; j < size; j++)  
  63.                     cout << line[1];  
  64.                 cout << line[2];  
  65.       
  66.                 // 在两个数字间要有一列空行。  
  67.                 if (i < (MAXLENGTH - 1))  
  68.                     cout << " ";  
  69.             }  
  70.         cout << '\n';  
  71.     }  
  72. }  
  73.   
  74. int main (int ac, char *av[])  
  75. {  
  76.     long size, number;  
  77.       
  78.     while ((cin >> size >> number, size || number))  
  79.     {  
  80.         lcd_display (size, number);  
  81.         cout << endl;  
  82.     }  
  83.       
  84.     return 0;  
  85. }  
原创粉丝点击