pku 1489解题报告
来源:互联网 发布:用winhex怎么恢复数据 编辑:程序博客网 时间:2024/06/06 03:26
埃及乘法 二进制 打表
一.题意:
1.几个的符号分别代表1,10,100,1000,10 000
2.计算a*b,b用二进制表示。
3.第一列从1开始,用c表示,第二列从a。每次翻倍,当c>b时,结束。如果,c的二进制表示能表示b的二进制,加*号。最后,把带*号的c加起来,就是结果
二.思路:
1.处理输入tran(): 翻译a,b->ta,tb
用tr[]数组可以简短代码长度,下标用字符的ASCII码表示;用指针也可简短代码长度,不过,这是我第一次这样用,尝试一下
2.翻倍:
c,ta每次翻倍,要翻译成埃及字符,用trans()函数
trans 先计算1的个数(用取模),再是10…
3.判断c是否能构成tb(二进制),用按位与运算’&’,这是一个简单的方法,在网上找的
4.处理输出格式
5.答案:可以直接把ta*tb的结果用埃及字符表示输出
三.代码
- #include <stdio.h>
- #include <stdlib.h>
- #include<string.h>
- char a[110],b[110],t[]={"|n98r"};
- int tr[125],f[]={1,10,100,1000,10000,100000,100000};//后补两个构成6元素
- //'|'=124 输出 34
- int tran(char *a)
- {int ta=0;
- while(*a)ta+=tr[*a++];
- return ta;
- }
- void trans(int a,char *x)
- {
- int i,n=0,mo;
- for(i=0;i<5;i++)
- {
- mo=a%f[i+1]/f[i];//妙哉
- if(mo)
- {
- while(mo--)x[n++]=t[i];
- x[n++]=' ';
- }
- }x[n]=0;
- }
- int main()
- {
- int ta,tb,i,c;
- char m1[100],m2[100];
- tr['|']=1,tr['n']=10,tr['9']=100,tr['8']=1000,tr['r']=10000;
- while(gets(a),strlen(a))
- {
- gets(b); c=1;
- ta=tran(a);tb=tran(b);int tmp=ta;
- for(i=0;c<=tb;c*=2,ta*=2,i++)
- {
- trans(c,m1);
- trans(ta,m2);
- printf("%s%c",m1,(tb&c)?'*':' ');//位与
- int yu=34-1-strlen(m1);
- while(yu--)putchar(' ');
- puts(m2);
- }trans(tmp*tb,m1);
- printf("The solution is: %s\n",m1);
- }
- system("pause");
- return 0;
- }
四.通过这道题,掌握了&运算,更熟练的运用了指针和逗号运算符
补充:
&也可以做位运算(主要是针对二进制),表示“按位与”运算
如果两个数相应的二进位都是1,那么该位的结果值也是1,否则为0
比如:
0&0=0,0&1=0,1&0=0,1&1=1
- pku 1489解题报告
- pku 1011 解题报告
- pku 2975解题报告
- pku 1088 解题报告
- pku 1002 解题报告
- pku 1003解题报告
- pku 1004 解题报告
- pku 1005 解题报告
- pku 1006 解题报告
- pku 1008 解题报告
- pku 1011 解题报告
- pku 1013 解题报告
- pku 1050 解题报告
- pku 2389解题报告
- pku 1835解题报告
- PKU 1086解题报告
- ACM pku 1005 解题报告
- ACM pku 1004 解题报告
- pku 1835解题报告
- 后端程序员快速学习flash/actionscript交互一点点总结
- android之手势识别
- 最新整理常用Web Service汇总(天气预报、时刻表等)
- 短小精悍的xml读写器-tinyxml
- pku 1489解题报告
- 联想v360笔记本 windows server 2003 下用vmware 7 安装mac系统
- css样式表简介
- 【染色】三维扫描
- 下载chrome的.crx文件
- 常见服务的端口
- 打开 iTunes 时出现“错误 7” 提示的解决办法
- JavaScript应用经验
- [笔记]06Adapter 适配器