题目大意:将两个二进制数的GCD用二进制数表示出来。

题目分析:这道题可以用java中的大数类AC。

代码如下:

import java.io*;
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String agrs[]){
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
for(int i=1;i<=T;++i){
String p=sc.next();
String q=sc.next();
BigInteger a=new BigInteger(p,2);
BigInteger b=new BigInteger(q,2);
a=a.gcd(b);
System.out.print("Case #"+i+": ");
System.out.println(a.toString(2));
}
sc.close();
}
}

  

不过,也可以用二进制来求GCD。

gcd(a,b)=gcd(a/2,b/2)*2 (a,b均为偶数)

gcd(a,b)=gcd(a,b/2) (a为奇数,b为偶数)

gcd(a,b)=gcd((a-b)/2,b) (a,b均为奇数)

很可惜我用C++没AC,下面是我没AC的代码:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
# include<string>
using namespace std; bool isBigger(string p,string q)
{
if(p.length()>q.length()) return true;
else if(p.length()<q.length()) return false;
else{
int len=p.length();
for(int i=len-1;i>=0;--i){
if(p[i]>q[i]) return true;
else if(p[i]<q[i]) return false;
}
}
} string sub(string p,string q)
{
int len=q.length();
for(int i=0;i<len;++i){
if(p[i]>=q[i])
p[i]=p[i]-q[i]+'0';
else{
p[i+1]-=1;
p[i]=p[i]+2-q[i]+'0';
}
}
for(int i=len;i<p.length();++i){
if(p[i]<'0'&&i+1<p.length()){
--p[i+1];
p[i]+=2;
}
}
len=p.length();
while(p[len-1]<='0'&&len>0)
--len;
return p.substr(0,len);
} string f(string p,string q)
{
if(p==q) return p;
if(p=="1") return "1";
if(q=="1") return "1";
int n=p.length(),m=q.length();
if(p[0]=='0'&&q[0]=='0')
return f(p.substr(1,n-1),q.substr(1,m-1))+'0';
else if(p[0]=='1'&&q[0]=='0')
return f(p,q.substr(1,m-1));
else if(p[0]=='0'&&q[0]=='1')
return f(p.substr(1,n-1),q);
else{
if(isBigger(p,q)){
p=sub(p,q);
n=p.length();
return f(p.substr(1,n-1),q);
}else{
q=sub(q,p);
m=q.length();
return f(p,q.substr(1,m-1));
}
}
} int main()
{
int T;
string p,q;
scanf("%d",&T);
for(int i=1;i<=T;++i){
cin>>p>>q;
reverse(p.begin(),p.end());
reverse(q.begin(),q.end());
cout<<"Case #"<<i<<": "<<f(p,q)<<endl;
}
return 0;
}

  

HDU-5050 Divided Land (二进制求GCD)的更多相关文章

  1. hdu----(5050)Divided Land(二进制求最大公约数)

    Divided Land Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  2. HDU 5050 Divided Land(进制转换)

    题意  给你两个二进制数m,n   求他们的最大公约数  用二进制表示  0<m,n<2^1000 先把二进制转换为十进制  求出最大公约数  再把结果转换为二进制  数比較大要用到大数 ...

  3. Hdu 5050 Divided Land

    题目要求就是做求两个二进制数的gcd,如果是用java的话,这题很简单.但也可以用C++做,只能先给自己留下这个坑了,还在研究c++的做法. import java.math.BigInteger; ...

  4. HDU - 5050 (大数二进制gcd)

    It's time to fight the local despots and redistribute the land. There is a rectangular piece of land ...

  5. HUD 5050 Divided Land

    http://acm.hdu.edu.cn/showproblem.php?pid=5050 题目大意: 给定一个矩形的长和宽,把这个矩形分成若干相等的正方形,没有剩余.求正方形的边长最长是多少. 解 ...

  6. HDU5050:Divided Land(大数的进制转化与GCD)

    题意:给定大数A和B,求gcd.所有数字都是二进制. 思路:先输入字符串,再转化为大数,然后用大数的gcd函数,最后转化为字符串输出. 利用字符串和大数转化的时候可以声明进制,就很舒服的完成了进制转化 ...

  7. 二进制求最大公约数&&输出二进制

    Divided Land Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  8. hdu 1255 覆盖的面积(求覆盖至少两次以上的面积)

    了校赛,还有什么途径可以申请加入ACM校队?  覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  9. [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)

    [洛谷P1029]最大公约数与最小公倍数问题 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P, ...

随机推荐

  1. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  2. web前端----JavaScript的DOM(三)

    一.JS中for循环遍历测试 for循环遍历有两种 第一种:是有条件的那种,例如    for(var i = 0;i<ele.length;i++){} 第二种:for (var i in l ...

  3. Python入门之获取当前所在目录的方法详解

    #本文给大家讲解的是使用python获取当前所在目录的方法以及相关示例,非常的清晰简单,有需要的小伙伴可以参考下 sys.path 模块搜索路径的字符串列表.由环境变量PYTHONPATH初始化得到. ...

  4. mongodb 最佳可视化工具mongobooster

    最好用的mongodb GUI工具 mongobooster,没有之一,可从https://mongobooster.com/下载 常见管理命令可参考,http://www.cnblogs.com/l ...

  5. jQuery API的特点

    jQuery API 的特点 版权声明:未经博主授权,严禁转载分享 jQuery API 的三大特点 1. jQuery 对象是一个类数组对象,API自带遍历效果 - 对 jQuery 对象调用一次A ...

  6. linux虚拟机中安装vm_tool的方法及用处

    解决问题:实现虚拟机VMware上linux与windows互相自由复制与粘贴.如在同一个系统下ctrl+c 与ctrl+v一样方便.解决了只能通过U盘摆渡复制的繁琐问题. 系统环境: 虚拟机VMwa ...

  7. 20145317彭垚《网络对抗》Exp7 网络欺诈技术防范

    20145317彭垚<网络对抗>Exp7 网络欺诈技术防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 在同一局域网下比较容易受到DNS spoof攻击,攻击者可以冒充 ...

  8. github客户端上传代码

    在window下安装github客户端上传代码 第一步:创建Github新账户 第二步:新建仓库 第三步:安装Github shell程序,地址:http://windows.github.com/ ...

  9. MAC下BurpSuit社区版升级pro版

    环境OSX 步骤1. 官网下载社区版v1.7.32https://portswigger.net/burp/communitydownload 安装 2. 下载keygenhttps://down.5 ...

  10. JavaScript new return 类的实例化

    new初始化方法 简单没有return的就不写了 function Person() { this.name="hongda"; ; return "fffffff&qu ...