鱼C论坛

 找回密码
 立即注册
查看: 1421|回复: 0

[学习笔记] Google foobar challenge

[复制链接]
发表于 2019-8-12 12:27:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Seawolf 于 2019-8-13 11:38 编辑

继续 level 3

69137712_2064691270505813_7487424699094269952_n.png

68751461_2387530648143744_660717990492241920_n.png

因为number的大小 could be 10^50, so we still need big integer.

  1. import java.math.BigInteger;

  2. public class main {

  3.     public static void main(String[] args){

  4.         String x = "4";

  5.         String y = "11";

  6.         BigInteger left = new BigInteger(x);

  7.         BigInteger right = new BigInteger(y);

  8.         BigInteger one = new BigInteger("1");

  9.         int count = 0;

  10.         while(!(left.compareTo(one) ==0 && right.compareTo(one) == 0)){

  11.             if (left.compareTo(right) > 0){

  12.                 left = left.subtract(right);

  13.                 System.out.println("==============");

  14.                 System.out.println(left);

  15.                 count++;

  16.             }

  17.             else if (left.compareTo(right) < 0){

  18.                 right = right.subtract(left);

  19.                 System.out.println("&&&&&&&&&&&&&&&&&");

  20.                 System.out.println(right);

  21.                 count++;

  22.             }

  23.             else{

  24.                 System.out.println("Impossible");
  25.             }


  26.         }

  27.         System.out.println(count);


  28.     }


  29. }
复制代码


这个code有问题,当一个数特别大,另一个数特别小的时候,会消耗很多的时间,因为每次只从那个较大的数减去较小的数,系统会run out of time and finally it will fail
所以怎么办呢,要相处一个办法来处理两个相差很大的数

Here is the solution:

  1. import java.math.BigInteger;

  2. public class Solution {

  3.     public static String solution(String x, String y){

  4. //        String x = "2";
  5.         //2147483647
  6. //        String y = "1011111111111111111111111111111111111111111111";

  7.         BigInteger left = new BigInteger(x);

  8.         BigInteger right = new BigInteger(y);

  9.         BigInteger one = new BigInteger("1");

  10.         BigInteger zero = new BigInteger("0");

  11.         BigInteger count = new BigInteger("0");

  12.         if(left.compareTo(right) > 0){
  13.             BigInteger quo = left.divide(right);
  14. //            BigInteger result = left.subtract(right);\
  15.             BigInteger quoTimesRight = quo.multiply(right);
  16.             if(quo.compareTo(BigInteger.ONE) > 0 &&  quoTimesRight.compareTo(left) != 0){

  17. //                quoTimesRight = quoTimesRight.subtract(BigInteger.ONE);
  18.                 count = count.add(quo);
  19.                 left = left.subtract(quoTimesRight);
  20. //                System.out.println(left.toString(10));
  21. //                result = left;
  22.             }


  23. //            return result.toString(10);

  24.         }else if (left.compareTo(right) < 0){
  25.             BigInteger quo = right.divide(left);
  26. //            BigInteger result = right.subtract(left);
  27.             BigInteger quoTimesLeft = quo.multiply(left);
  28.             if(quo.compareTo(BigInteger.ONE) > 0 &&  quoTimesLeft.compareTo(right) != 0){

  29. //                quoTimesLeft = quoTimesLeft.subtract(BigInteger.ONE);
  30.                 count = count.add(quo);
  31.                 right = right.subtract(quoTimesLeft);
  32. //                result = right;
  33. //                System.out.println(right.toString(10));
  34.             }



  35. //            return result.toString(10);
  36.         }
  37. //            System.out.println("impossible");
  38. //            return "impossible";



  39.         if(left.compareTo(one) < 0 || right.compareTo(one) < 0){

  40. //            System.out.println("impossible");
  41.             return "impossible";
  42.         }

  43.         while(!(left.compareTo(one) == 0 && right.compareTo(one) == 0)){

  44.             if(left.compareTo(right) == 0){

  45.                 count = new BigInteger("0");

  46.                 break;
  47.             }

  48.             if (left.compareTo(right) > 0){

  49.                 left = left.subtract(right);

  50.                 count = count.add(one);

  51. //                System.out.println(count.toString(10));

  52.             }

  53.             else if (left.compareTo(right) < 0){

  54.                 right = right.subtract(left);

  55.                 count = count.add(one);

  56. //                System.out.println(count.toString(10));

  57.             }

  58.             else{
  59. //                System.out.println("impossibimpossle");

  60.                 return "impossible";

  61. //                break;
  62.             }


  63.         }
  64. //        System.out.println(Integer.toString(count));

  65.         if(count.compareTo(zero) != 0){

  66. //            System.out.println(count.toString(10));
  67.             return count.toString(10);
  68.         }


  69.         else{

  70. //            System.out.println("impossible");
  71.             return "impossible";
  72.         }



  73.     }

  74. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 05:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表