[置顶] [ACM]在命令行以LED样式显示输入的数字
2012-09-10 14:13
375 查看
昨天,一个同学和我说了一道ACM题目,说很有趣,于是乎我就听了他给我介绍了题目的要求:
每行输入两个数如下所示:
1 1234567890
输出:
2 1234567890
输出
3 1234567890
输出
我想我图贴到这里大家应该知道题目的要求了吧。
分析:上面的数字输出有点想LED数字输出,不知道大家知不知道LED七段显示,在我下面的程序中,我就是用到了这个,每一位存储是否有开启0表示不开启,1表示开启
如下
上面0-6分别对应于LED的一段,一共有7段,所以我们可以用7bit来分别存储里面,0表示无,1表示有
比如 2的LED显示为
我们可以用下面的二进制表示(从6-0顺序)为1011101;同理3的二进制表示为1101101;4的二进制表示为0101110,有了上面的分析,在输出的时候。只有i = 0\3\6都是表示横向,其余的表示纵向,他们的输出是不一样的。设置了位就输出相应的标志,没有设置就输出空格。代码如下:
输出:
每行输入两个数如下所示:
1 1234567890
输出:
2 1234567890
输出
3 1234567890
输出
我想我图贴到这里大家应该知道题目的要求了吧。
分析:上面的数字输出有点想LED数字输出,不知道大家知不知道LED七段显示,在我下面的程序中,我就是用到了这个,每一位存储是否有开启0表示不开启,1表示开启
如下
上面0-6分别对应于LED的一段,一共有7段,所以我们可以用7bit来分别存储里面,0表示无,1表示有
比如 2的LED显示为
我们可以用下面的二进制表示(从6-0顺序)为1011101;同理3的二进制表示为1101101;4的二进制表示为0101110,有了上面的分析,在输出的时候。只有i = 0\3\6都是表示横向,其余的表示纵向,他们的输出是不一样的。设置了位就输出相应的标志,没有设置就输出空格。代码如下:
#include <iostream> #include <string> #include <vector> /** Author: w397090770 E-mail:wyphao.2007@163.com 只用于学习交流,转载请写上上面的注释,谢谢您的厚道。 */ using namespace std; char ptr[] = { //这些数是表示0-9的LED显示 119, 36, 93, 109, 46, 107, 123, 37, 127, 111 }; bool getBit(char c, int i){ return c & (1 << i); } int main(){ string num = "1234890"; int n = 3; int len = 0; len = num.length(); //存上面数字的数字表示 vector<char>v; int i = 0; for(i = 0; i < len; i++){ v.push_back(ptr[num[i] - '0']); //cout << (int)v[i] << endl; } //是否为横向 bool isH = false; int j = 0, k = 0, l = 0; for(i = 0; i < 7; i++){ //横向 for(j = 0; j < len; j++){ for(k = 0; k < n + 2; k++){ if(i == 0 || i == 3 || i == 6){ isH = true; }else{ isH = false; } if(isH && (k == 0 || k == n + 1)){ cout << " "; }else if((i == 0 || i == 3 || i == 6) && getBit(v[j], i)){ cout << "-"; }else if((i == 0 || i == 3 || i == 6) && !getBit(v[j], i)){ cout << " "; } } } //竖向 for(k = 0; k < n; k++){ for(j = 0; j < len; j++){ if((i == 1 || i == 4) && getBit(v[j], i)){ cout << " |"; for(l = 0; l < n; l++){ cout << " "; } }else if((i == 1 || i == 4)&& !getBit(v[j], i)){ cout << " "; for(l = 0; l < n; l++){ cout << " "; } } if(((i + 1) == 2 || (i + 1) == 5) && getBit(v[j], i + 1)){ cout << " |"; }else if(((i + 1) == 2 || (i + 1) == 5) && !getBit(v[j], i + 1)){ cout << " "; } } if(!isH){ cout << endl; } } //已经输出了,所以需要跳掉 if(i == 1 || i == 4){ i++; }else{ cout << endl; } } cout << endl; return 0; }
输出:
相关文章推荐
- 定制的小键盘输入数字显示的LED计分显示屏
- 从命令行输入5个整数,放入一整型数组,然后打印输出。要求: 如果输入数据不为整数,要捕获输入不匹配异常,显示“请输入整数”;如果输入数据多余5个,捕获数组越界异常,显示“请输入5个整数”。 无论是否发
- ACM程序设计书中题目--Y(输入字符串输出每个数字连续出现的个数及数字)
- c显示数字的LED(数字转LED)
- [置顶] ShiftyTextview(数字会滚动的TextView)(仿支付宝余额显示,膜拜单车骑行数据显示)
- ios5与ios7数字输入样式一致
- 2007-01-15 18:38 动态显示用户输入的字数,文本框只能输入数字的代码
- 让TextBox只输入金额或数字的方法,显示的时候很漂亮,输入的时候很方便
- [置顶] Input输入框只能输入数字
- JS+PHP实现用户输入数字后取得最大的值并显示为第几个
- 输入4个数字,显示它们的乘积
- [置顶] android开发之使edittext输入弹出数字软键盘。亲测可用。手机号登陆注册常用。
- WPF自定义LED风格数字显示控件
- 安卓edittext默认显示数字键盘,但还能能输入字母
- 显示数字的样式
- [置顶] ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示
- 不断要求用户输入一个数字当用户输入end的时候显示刚才输入的数字中的最大值
- EdtText默认显示数字键盘,不强制输入数字
- 在实现文本框只能输入数字和小数点的基础上实现了价格样式(保留两位小数)
- 编写猜字游戏,随机产生一个1-1000的整数,玩家任意输入一个数字,计算器回答大于该数或者小于该数,直至猜中。(显示玩家猜的次数)