题目:大概内容是 一个六位数的幸运数字 前三位和和后三位和相等,就认为是幸运数字;求输入一个数字之后,求出下一个幸运数字。
例如:
就是一个 333333 的下一个幸运号为 333342等.....
public class LuckNumber {
public static void main(String[] args) {
//输入一个幸运号
Scanner sc = new Scanner(System.in);
int s = sc.nextInt();
//处理相等的情况
Boolean first = true;
while (true) {
Integer number = s;
int low = 0;
int high = 0;
for (int i = 1; i <= 6; i++) {
if (i <= 3) {
low += number % 10;
number = number / 10;
} else {
high += number % 10;
number = number / 10;
}
}
if ((!first) && low == high) {
break;
} else {
first = false;
s++;
}
}
System.out.println(s);
}
}
根据上面的情景 我能还能加一个条件到最近的一个幸运号,可能是前面的和后面的,因此我们还可以进行完整算法:
package com.ts;
import java.util.Scanner;
/**
* @Author Jerry
* @Date 2021/10/3122:01
* @Version 1.0
*/
public class LuckNumber {
public static void main(String[] args) {
//输入一个幸运号
Scanner sc = new Scanner(System.in);
int s = sc.nextInt();
int result = luckNumber(s);
System.out.println(result);
}
public static int luckNumber(int s){
int sBefore = s;
//处理相等的情况
Boolean first = true;
//取前面的幸运数字
while (true) {
Integer number = s;
Integer before = sBefore;
int low = 0;
int high = 0;
int lowBefore = 0;
for (int i = 1; i <= 6; i++) {
if (i <= 3) {
//取后面出现的幸运数值
low += number % 10;
number = number / 10;
//去前面的幸运数值
lowBefore += before % 10;
before = before / 10;
} else {
high += number % 10;
number = number / 10;
}
}
if ((!first) && low == high) {
System.out.println("low" + s);
return s;
}
if ((!first) && lowBefore == high) {
System.out.println("lowBefore" + sBefore);
return sBefore;
} else {
first = false;
s++;
sBefore--;
}
}
}
}
总结:一般用到数字的相加 或者 正转翻转的都会用到,取余操作。对于长数字类型不要进行String的charAt操作,因为在进行相加或者什么的时候,容易出现溢出等情况,整数型数据要经常考虑溢出等问题。