题目大意:将两个二进制数的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. MongoDB— 细说操作

    基本操作 由于是开篇,就大概的说下基本的“增删查改“,我们再开一个cmd,输入mongo命令打开shell,其实这个shell就是mongodb的客户端, 同时也是一个js的编译器,默认连接的是“te ...

  2. 20165310_Exp2实验二《Java面向对象程序设计》

    实验二<Java面向对象程序设计> TDD与单元测试 前期准备: 什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含 ...

  3. np.tile 和np.newaxis

    output   array([[ 0.24747071, -0.43886742],   [-0.03916734, -0.70580089],   [ 0.00462337, -0.5143158 ...

  4. assert_param

    在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用.如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义 ...

  5. noip2007部分题

    1.统计数字 题目描述 Description 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000 个,现在需要统计这些自然数各自出现 ...

  6. UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解

    思路: Prim: 这道题目中有重边 Prim可以先加一个sec数组来保存重边的次小边,这样不会影响到最小生成树,在算次小生成树时要同时判断次小边(不需判断是否在MST中) Kruskal: Krus ...

  7. 【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能

    来到了TCP的最后一个章节,未来与性能.在当时(1991年)的未来,如今已经部分变为现实,部分就只是历史中的实验. 主要内容: 路径MTU的发现与TCP的结合. 长肥管道 和 高速千兆比网络. 窗口扩 ...

  8. 【转】Makefile 中:= ?= += =的区别

    最近接触使用C++项目,需要使用Makefile,因此需要好好学习下. [转自]:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257 ...

  9. asp.net webform 自定义 select 绑定数值

    前台: <select id="ddlAddedItemType" runat="server"> <option value="& ...

  10. List<T>随机返回一个

    /// <summary> /// 随机返回一条数据 /// </summary> /// <param name="list"></pa ...