当前位置: 首页 > 知识库问答 >
问题:

最大整数值java

诸经略
2023-03-14

我试图从Geeksforgeeks中解决最大整数值问题。
问题如下:给定一个数字(0-9)的字符串S,您的任务是找到可以从字符串中获得的最大值,方法是将“*”或“”运算符放在数字之间,同时从字符串的左到右遍历并一次拾取一个数字。

输入:输入的第一行包含T表示测试用例的数量。T测试用例紧随其后。每个测试用例包含一行表示字符串的输入。

输出:对于每个测试用例,打印获得的最大值。

这就是我所做的:

class GFG
 {
    public static void sort(int[] numbers)
    {
        int n = numbers.length; 
        for (int i = 1; i < n; ++i) 
        { 
            int key = numbers[i]; 
            int j = i - 1; 

            while (j >= 0 && numbers[j] > key) 
            { 
                numbers[j + 1] = numbers[j]; 
                j = j -1 ; 
            } 
            numbers[j + 1] = key; 
        }

        System.out.println(numbers.length - 1);
    }
    public static void main (String[] args)
     {
        Scanner sc = new Scanner(System.in);
        int testCases = sc.nextInt();
        int [] maxNum;
        for(int i = 0; i< testCases; i++)
        {
            String numbers = sc.nextLine();
            char[] cNumbers = numbers.toCharArray();
            maxNum = new int [cNumbers.length];
            for(int j = 0; j + 1 < cNumbers.length; j++)
            {
                int sum = 0;
                int mult = 0;
                sum = cNumbers[j] + cNumbers[j + 1];
                mult = cNumbers[j] * cNumbers[j + 1];
                int maxNumber = Math.max(sum, mult);
                maxNum[i] = maxNumber;
            }               
            sort(maxNum);
        }
     }
}

输入示例:2 01230 891我的输出:-1 4正确输出:9 73

我的代码有什么问题?!

共有3个答案

盖辉
2023-03-14

执行后

int testCases = sc.nextInt();

缓冲区包含新行字符。所以在执行该行时

String numbers = sc.nextLine();

它将“\n”读入数字,因此您得到了-1作为第一个输出。在使用任何算术运算之前,还需要将字符转换为整数。

sum = cNumbers[j] + cNumbers[j+1];
mult = cNumbers[j] * cNumbers[j+1];

因此,上面的代码将给出错误的结果。

我尝试了以下示例并成功了。

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String inputAsString = sc.nextLine();
        int testCases = Integer.parseInt(inputAsString);
        int maxNumber = 0;
        for (int i = 0; i < testCases; i++) {
            String numbers = sc.nextLine();
            if(!numbers.matches("\\d+")){
                System.out.println("Only numeric values are expected.");
                continue;
            }
            char[] cNumbers = numbers.toCharArray();
            int sum = 0;
            int mult = 1;
            for (int j = 0; j < cNumbers.length; j++) {
                int nextNumber = Character.getNumericValue(cNumbers[j]);
                sum = sum + nextNumber;
                mult = mult * nextNumber;
                maxNumber = mult > sum ? mult : sum;
                sum = maxNumber;
                mult = maxNumber;
            }

            System.out.println(maxNumber);
        }
        sc.close();
    }
陶飞英
2023-03-14

其思想是交替放置操作符并选择最大结果。

import java.util.Scanner;

    public class Demo {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int testCases = Integer.parseInt(sc.nextLine());
            for (int i = 0; i < testCases; i++) {
                String numbers = sc.nextLine();
                int max = 0;
                for (int j = 0; j + 1 < numbers.length(); j++) {
                    int next = Integer.parseInt(numbers.substring(j, j+1));
                    if (max +  next > max * next)
                        max = max + next;
                    else
                        max = max * next;
                }
                System.out.println(max);
            }
            sc.close();
        }
    }
劳和歌
2023-03-14

快速看一眼,如果你的数字小于2,就应该加上。应乘以2或更大。但不是在PC上测试。

 类似资料:
  • 问题内容: 在C中,整数(对于32位计算机)为32位,范围为-32,768至+32,767。在Java中,整数(long)也是32位,但范围为-2,147,483,648至+2,147,483,647。 我不了解Java中的范围有何不同,即使位数相同。有人可以解释吗? 问题答案: 在C语言中,语言本身无法确定某些数据类型的表示形式。它因机器而异,在嵌入式系统上int可以为16位宽,尽管通常为32位

  • 在C语言中,整数(对于32位机器)是32位,其范围为-32,768到+32,767。在Java中,整数(长)也是32位,但范围从-2,147,483,648到+2,147,483,647。 我不明白Java中的范围是怎么不同的,尽管位数是一样的。有人能解释一下吗?

  • 问题内容: 我正在寻找python中整数的最小值和最大值。例如,在Java中,我们有和。python中是否有类似的东西? 问题答案: Python 3 在Python 3中,此问题不适用。普通int类型是无界的。 但是,你实际上可能正在寻找有关当前解释器的字长的信息,在大多数情况下,该信息将与机器的字长相同。该信息在Python 3中仍以形式提供,这是一个有符号的单词可以表示的最大值。等效地,它是

  • 我有点惊讶地看到为什么在我的机器上,数组的最大大小是整数.MAX_VALUE/7 我知道数组是由整数索引的,所以数组大小不能大于整数.MAX_VALUE。我还阅读了一些堆栈溢出讨论,我发现它在JVM上有所不同,并且JVM使用了一些(5-8咬)。 在这种情况下,最大值也应为。 和 之间的任何值都会给我错误: 这是我可以分配给机器上数组的最大值。具体原因是什么? 更新:我正在运行eclipse中的代码

  • 问题内容: 我试图从我的int数组返回两个最大的整数。我能够返回最大和最小的罚款,但无法获得返回两个最大罚款的算法。任何帮助在这里都将不胜感激。 请原谅我的代码中的任何错误。这是一次练习,问题取自去年大学的考试材料。 这是我的代码: 问题答案: 你可以写

  • 问题 你需要找出数组中包含的最大的值。 解决方案 你可以使用 JavaScript 实现,在列表推导基础上使用 Math.max(): Math.max [12, 32, 11, 67, 1, 3]... # => 67 另一种方法,在 ECMAScript 5 中,可以使用 Array 的 reduce 方法,它与旧的 JavaScript 实现兼容。 # ECMAScript 5 [12,