题目大意:将两个二进制数的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. java反射之-性能优化

    在最近的计划中,打算看看在不使用google protobuf的情况下,在原有的采用jackson作为json序列化工具的基础上,是否可以实现进一步的性能优化.主要是针对list的情况. 测试的时候选 ...

  2. 20145109竺文君、20145106石晟荣 java实验三

    重构的概念:重构(Refactoring)就是通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 首先由zwj在<git.oschina.net& ...

  3. 2019“嘉韦思”杯RSA256题目wp

    首先我们从网站下载了一个压缩包,解压出来一看里面有2个文件 首先我们先打开fllllllag康康,结果发现是一串乱码,这时候第一反应就是,文件被加密了,再看fllllllag下面的gy.key文件,更 ...

  4. 2018-2019-1 1723《程序设计与数据结构》第5&6&7周作业 总结

    作业地址 第五周作业: 提交情况如图: 第六周作业: 提交情况如图: 第七周作业: 提交情况如图: 作业问题 很多看上写的比较详细并且语言组织的也不错,我就这么随手一百度,搜出来了很多篇博客.(无奈) ...

  5. codevs & vijos 爱在心中 - Tarjan

    描述 “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度里有N个人,在他们的心中都有 ...

  6. 解决Type safety: The expression of type List needs

    解决Type safety: The expression of type List needs unchecked conversion to conform to 在方法前加上这句话就可以了@Su ...

  7. 矩阵二分快速幂优化dp动态规划

    矩阵快速幂代码: int n; // 所有矩阵都是 n * n 的矩阵 struct matrix { int a[100][100]; }; matrix matrix_mul(matrix A, ...

  8. hdu 6168 Numbers

    Numbers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  9. java web项目配置https访问

      转载: tomcat6配置:  1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源  2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址  如果只是加 ...

  10. HDU 2242 考研路茫茫——空调教室(边双连通分量+树形dp+重边标号)

    http://acm.hdu.edu.cn/showproblem.php?pid=2242 题意: 思路:首先求一下双连通分量,如果只有一个双连通分量,那么无论断哪根管子,图还是连通的. 最后只需要 ...