下一个最大的数字

时间:2019-05-31 07:32:27

标签: java

我正在尝试从用户输入中查找下一个最大的数字。如果用户输入23,则输出显示为32.如果数字更大,则必须打印相同的给定数字。但是如果用户给出03,它显示3但必须显示30.因为它将03作为八进制数。我如何更改代码以将正确的输出显示为30?

public class Main
{
 static void swap(char ar[], int i, int j) 
 {  
  char temp = ar[i];
  ar[i] = ar[j];
  ar[j] = temp;
 }
 public static void main(String[] args)
 {
   Scanner in = new Scanner(System.in);
   int num = in .nextInt();
   char[] chars = ("" + num).toCharArray();
   int i;
   int n = chars.length;
   for (i = n - 1; i > 0; i--)
   {
    if (chars[i] > chars[i - 1]) 
     break;
   }
   if (i == 0) 
    System.out.println(num);
   else {
    int x = chars[i - 1], min = i;
   for (int j = i + 1; j<n; j++)
   {
    if (chars[j] > x && chars[j]<chars[min])
     min = j;
   }
   swap(chars, i - 1, min);
   Arrays.sort(chars, i, n);
   for (i = 0; i<n; i++)
     System.out.print(chars[i]);
  }
 }
}

4 个答案:

答案 0 :(得分:0)

public static int findNextGreatestNumber(int[] arr, int k) {
    int delta = Integer.MAX_VALUE;
    int res = 0;

    for (int a : arr) {
        if (a - k > 0 && a - k < delta) {
            delta = a - k;
            res = a;
        }
    }

    return delta == Integer.MAX_VALUE ? k : res;
}

答案 1 :(得分:0)

您正在从标准输入中读取整数形式的数字。尝试改为将其读取为字符串:

   Scanner in = new Scanner(System.in);
   String num = in.nextLine();
   char[] chars = num.toCharArray();

答案 2 :(得分:0)

package com.demo;

import java.util.Arrays;
import java.util.Scanner;

public class Demo {

    static void swap(char ar[], int i, int j) 
    {  
     char temp = ar[i];
     ar[i] = ar[j];
     ar[j] = temp;
    }
    public static void main(String[] args)
    {
      Scanner in = new Scanner(System.in);
      //int num = in .nextInt();
      char[] chars=null;
      String numStr=in.next();
      int num= Integer.valueOf(numStr);
      if(numStr.startsWith("0")) {
          chars= ("0" + num).toCharArray();
      }else {
          chars= ("" + num).toCharArray();
      }

      int i;
      int n = chars.length;
      for (i = n - 1; i > 0; i--)
      {
       if (chars[i] > chars[i - 1]) 
        break;
      }
      if (i == 0) 
       System.out.println(num);
      else {
       int x = chars[i - 1], min = i;
      for (int j = i + 1; j<n; j++)
      {
       if (chars[j] > x && chars[j]<chars[min])
        min = j;
      }
      swap(chars, i - 1, min);
      Arrays.sort(chars, i, n);
      for (i = 0; i<n; i++)
        System.out.print(chars[i]);
     }
    }
}

答案 3 :(得分:0)

在您的main()中,仅将输入作为String而不是将其作为整数。 String num=in.next();