BNU4065:二进制串的运算(模拟)
来源:互联网 发布:骑士巡游算法 编辑:程序博客网 时间:2024/06/07 03:01
我们知道,二进制与十进制是不一样的(废话……)。对于一位二进制运算,在不考虑借位时,加法和减法实际上都是异或运算:1⊕1=0,0⊕1=1⊕0=1,0⊕0=0。这样我们就可以定义如下一种在二进制串上的加法与减法:
类似我们可以定义如下的的除法运算,注意每一位商的选择都要求当前的余数最小。
上图中,11010110110000除以10011,余数为1110。现在我们任给定串M和串G(输入保证首位为1)求M除以G所得的余数串。
Input
第一行为一个正整数N,表示为测试数据组数,接下来N行每行给定两个二进制串M和G,长度都不超过100。
Output
每行输出余数串,不要输出多余的前导0
Sample Input
311010110110000 100111100100 11000111100100 1100100
Sample Output
11101110
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;char s1[105],s2[105];int len1,len2;int main(){ int t,i,j,k; scanf("%d",&t); while(t--) { scanf("%s%s",s1,s2); len1 = strlen(s1); len2 = strlen(s2); for(i = 0; i<len1; i++) { for(j = 0; j<len1; j++) { if(s1[j]!='0')break; } if(len1-j<len2) break; for(k = j; k<j+len2; k++) { if(s1[k] == s2[k-j]) s1[k] = '0'; else s1[k] = '1'; } } for(i = 0; i<len1; i++) if(s1[i] != '0') break; for(j = i; j<len1; j++) printf("%c",s1[j]); if(j == i) printf("0"); printf("\n"); } return 0;}
- BNU4065:二进制串的运算(模拟)
- BNU4065:二进制串的运算(模拟)
- 【模拟 数学】二进制串的运算
- 位运算模拟二进制加法--位图方法
- POJ1023_The Fun Number System_模拟二进制运算
- 二进制的运算方法
- 二进制的运算
- 二进制的运算符
- 二进制的运算
- 二进制的位运算
- 二进制的位运算
- 二进制的位运算
- 二进制的位运算
- 二进制的运算相关
- 模拟二进制的"|" "&"操作
- 二进制的转换与二进制的运算
- 二进制运算(& , | , ~的运算规则)
- 二进制整数的乘除运算
- TOOLTIP的使用
- 计算t=1+1/2+1/3+...+1/n
- 解决sql server 2008评估期已到
- BNU4063:桌球游戏
- 高薪技术排行
- BNU4065:二进制串的运算(模拟)
- 算法:斐波那契兔子问题
- 23中常用的设计模式
- BNU4066:VI++ (模拟)
- 位移密码 nyist768
- C函数中,可变长参数的传递?
- bochs调试
- BNU4067:美丽的花环(求圆相交面积)
- 字符串移位包含