给定2个表示数字作为输入的字符串,返回较大的数字。请注意,这两个数字都是非负数

时间:2015-08-23 16:52:39

标签: java

Sample Input #1

larger("923","3243")

Sample Output #1

3243

Sample Input #2

larger("2354725234782357","2354725234782347")

Sample Output #2

2354725234782357   

public String larger(String num1, String num2){

      String str1="";
      int a=Integer.parseInt(num1);
      int b=Integer.parseInt(num2);
      if(num1.length()>num2.length())
      return num1;
      if(num2.length()>num1.length())
      return num2;
      if(num1.length()==num2.length()){
      if(a>b){
      str1=""+a;
      return str1;
      }  
      }
      return str1+b;


   }

我的代码通过了第一个测试用例但无法通过其他情况。该怎么办?使用字符串函数。

Testcase    Pass/Fail   Parameters  Actual Output   Expected Output
#1  Pass    '1233456' '98765'   1233456     1233456
#2  Fail    '9283941233456' '23745237234298765'     null    23745237234298765    

3 个答案:

答案 0 :(得分:1)

不是将数字作为整数读取(假设您尝试解析的数字溢出整数范围),请按以下方式读取它们:

long a=Long.parseLong(num1);
long b=Long.parseLong(num2);

然后比较两个长数字以找出哪一个最大。

答案 1 :(得分:0)

在转换或比较之前,请检查您的数字是否应该溢出到int。您的值导致整数溢出。因此意外的结果。

检查您的输入必须在-2,147,483,648 to 2,147,483,647范围内。如果您想处理大于这些数字,请转到long&#39>

答案 2 :(得分:0)

为了将数字与以下标准进行比较:

  • "数字是非负面的"
  • "不使用字符串函数"
  • "无法长期解析数字" (来自SMA的回答)

这没有任何意义。如果您将数字作为字符串接收,则 使用某些字符串函数来检查该值。

鉴于第一个标准,我认为这意味着你不能使用任何以字符串作为参数的函数。这会消除Integer.parseInt(String)Long.parseLong(String)new BigInteger(String)等等。

相反,您的逻辑应该是将数字"作为字符串"进行比较。这基本上意味着:

  • 比较字符串长度。如果不同,则较长的字符串是较大的数字。
  • 对于相同的长度,简单的字符串比较将为您提供更大的"更大的"号。

上述代码假定数字未输入前导零,例如0003的比较大于07。如果这是一个问题,我会留给你试着找出解决方法。