POJ 2845 01000001(高精度)
2015-10-04 11:32
288 查看
Description
给出a和b两个01串,模拟二进制加法过程输出a+b
Input
第一行为一整数T表示用例组数,每组用例占一行包括两个01串
Output
对于每组用例,输出两个01串相加的结果(最简形式)
Sample Input
3
1001101 10010
1001001 11001
1000111 1010110
Sample Output
1 1011111
2 1100010
3 10011101
Solution
高精度加法,注意前置0
Code
给出a和b两个01串,模拟二进制加法过程输出a+b
Input
第一行为一整数T表示用例组数,每组用例占一行包括两个01串
Output
对于每组用例,输出两个01串相加的结果(最简形式)
Sample Input
3
1001101 10010
1001001 11001
1000111 1010110
Sample Output
1 1011111
2 1100010
3 10011101
Solution
高精度加法,注意前置0
Code
#include<stdio.h> #include<string.h> void solve(char *a,char *b,char *c) { int l1=strlen(a),l2=strlen(b),x[111],y[111],z[111]; int l=l1>l2?l1:l2; memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); memset(z,0,sizeof(z)); for(int i=l1-1;i>=0;i--) x[l1-1-i]=a[i]-'0'; for(int i=l2-1;i>=0;i--) y[l2-1-i]=b[i]-'0'; int k=0; for(int i=0;i<l;i++) { z[i]=(x[i]+y[i]+k)%2; k=(x[i]+y[i]+k)/2; } z[l++]=k; while(l>=0&&z[l-1]==0)l--;//去前置0 if(l==0)//a+b=0时特判 { c[0]='0'; c[1]='\0'; return ; } for(int i=0;i<l;i++) c[i]=z[l-1-i]+'0'; c[l]='\0'; } int main() { char s1[111],s2[111],ans[111]; int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s%s",s1,s2); solve(s1,s2,ans); printf("%d %s\n",i,ans); } return 0; }
相关文章推荐
- 说说Python程序的执行过程
- IOS 自定义的UITableViewCell实现UITableView
- 又是一番风味
- 操作系统基本知识
- 著名博客地址收藏(未完待续……)
- array_merge() 用法
- 用例建模的五个子过程
- 剑指offer 代码
- iOS图文攻略之UITextField 属性
- POJ 2833 The Average(水~)
- leetcode之Maximum Product Subarray
- MySQL
- 五大常用算法使用情境
- android wifi信号检测
- 虚拟内存(操作系统)
- JSON 数据格式
- 文件搜索命令-用户管理命令
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- 出现No module named numpy的解决办法
- 图片数字时钟