题意:给出二进制表示的长方形的边长。求出一个最大的正方形,使整个长方形分成最多的正方形。输出正方形的边长,同样也要用二进制输出。
思路:很直接的就想到了,正方形的边长是长方形的两个边长的GCD。但是因为长度用二进制表示,同时大小为2^1000,只能用java了。
注意:需要注意一点的是,在HDU中,回车换行是\r\n(我猜因为是因为HDU是windows系统)。但是在C标准中,回车换行是\n。
代码如下:
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
int T;
Scanner cin = new Scanner(System.in);
T = cin.nextInt();
int i = 1;
for(; i <= T; ++i){
String str = cin.next();
BigInteger L = new BigInteger(str,2);
str = cin.next();
BigInteger W = new BigInteger(str,2);
BigInteger ans = W.gcd(L);
System.out.println("Case #" + i +": " +ans.toString(2));
}
cin.close();
}
}