本文主要是介绍求一个int型整数的两种递减数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
求一个int型整数的两种递减数之和 | |
描述: | 给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数;2.递减数中各位数之和最大的数)之和。
|
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: | 一个int型整数。如:75345323 |
输出: | 一个int型整数。如:1506
|
样例输入: | 75345323 |
样例输出: | 1506 |
答案提示: | |
题目不算严谨,做题的过程中我做了一些假设,总的来说没啥技术含量,单纯的队列结构的使用(指的是思想上的)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;//1找到递减数
//2找递减数中最大的
//3找到递减数中各位数和最大的数
//返回结果
public class Main {public static void main(String[] args) {// 数据输入 消除负数 把正整数转化成charArray便于处理Scanner in = new Scanner(System.in);int inputNumber = in.nextInt();inputNumber = Math.abs(inputNumber);char[] inputNumbers = (inputNumber + "").toCharArray();List<Integer> decreasingNumbers = findDecreasingNumbers(inputNumbers);// 封装异常输入if (decreasingNumbers.size() == 0) {System.out.println(0);return;}Integer[] decreasingNumbersArray = decreasingNumbers.toArray(new Integer[0]);Arrays.sort(decreasingNumbersArray);int maxDecreasingNumber = decreasingNumbersArray[decreasingNumbersArray.length - 1];int decreasingNuberWithMaxNumberSum = getDecreasingNuberWithMaxNumberSum(decreasingNumbersArray);int sum = maxDecreasingNumber + decreasingNuberWithMaxNumberSum;System.out.println(sum);}// 找到所有递减数// 这里用char去存取数字 所以赋给Integer的时候需要减掉48public static List<Integer> findDecreasingNumbers(char[] inputNumbers) {ArrayList<Integer> decreasingNumbers = new ArrayList<Integer>(20);// 存放中间数据ArrayList<Integer> cache = new ArrayList<Integer>(20);cache.add(inputNumbers[0] - 48);for (int i = 1; i < inputNumbers.length; i++) {if (inputNumbers[i] < inputNumbers[i - 1]) {// 如果满足递减规则 那么与前一位构成递减数的字符串也能满足for (int j = 0; j < cache.size(); j++) {cache.set(j, cache.get(j) * 10 + inputNumbers[i] - 48);decreasingNumbers.add(cache.get(j));}} else {cache.clear();}cache.add(inputNumbers[i] - 48);}decreasingNumbers.trimToSize();return decreasingNumbers;}// 这边预定义一下 如果存在多个各位数和最大的递减数 那么我们将返回最大的结果// 输入是一个 不为空的有序正数集public static int getDecreasingNuberWithMaxNumberSum(Integer[] decreasingNumbersArray) {int result = 0;int maxSum = 0;int temp = 0;for (int i = 0; i < decreasingNumbersArray.length; i++) {temp = getNumberSum(decreasingNumbersArray[i]);if (maxSum > temp) {continue;} else {maxSum = temp;result = decreasingNumbersArray[i];}}return result;}// 返回各位数字的和private static int getNumberSum(int inputInteger) {int result = 0;while (inputInteger > 0) {result += inputInteger % 10;inputInteger /= 10;}return result;}
}
这篇关于求一个int型整数的两种递减数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!