题意 给你两个二进制数m,n 求他们的最大公约数 用二进制表示 0<m,n<2^1000
先把二进制转换为十进制 求出最大公约数 再把结果转换为二进制 数比较大要用到大数
import java.util.*; import java.math.*; public class wl6_9 { static BigInteger two = BigInteger.valueOf(2), one = BigInteger.ONE, zero = BigInteger.ZERO; static BigInteger gcd(BigInteger a, BigInteger b) { while (!(a.mod(b).equals(zero))) { BigInteger t = a.mod(b); a = b; b = t; } return b; } static void bprint(BigInteger x) { if (x.equals(zero)) return; bprint(x.divide(two)); if (x.mod(two).equals(one)) System.out.print(1); else System.out.print(0); } public static void main(String[] args) { Scanner in = new Scanner(System.in); int T = in.nextInt(); String a, b; for (int t = 1; t <= T; t++) { a = in.next(); b = in.next(); int la = a.length(), lb = b.length(); BigInteger m = zero, n = zero; for (int i = 0; i < la; ++i) { m = m.multiply(two); if (a.charAt(i) == '1') m = m.add(one); } for (int i = 0; i < lb; ++i) { n = n.multiply(two); if (b.charAt(i) == '1') n = n.add(one); } System.out.printf("Case #%d: ", t); bprint(gcd(m, n)); System.out.println(); } in.close(); } }
3 10 100 100 110 10010 1100
Case #1: 10 Case #2: 10 Case #3: 110
原文地址:http://blog.csdn.net/acvay/article/details/39638411