不要看这个案例,只是给了两个数据,但其实是他有可能是给零个数据给一个数据也有可能给两个数据所以说这个地方用for循环获取数据是比较靠谱的,不要去定量的,就是定义两个数据,然后等待着给他输入数据这样的话会扣很多的分数,所以说在没有明确他会给几个。案例的时候一定要记得用for循环然后就会显得更加的灵活
然后下面这个函数用的是一个进位法,因为如果用暴力算法也能算出来,只不过它的分数是相当的低,像我这次用的暴力算法只得了20分,就相当于是得到了1/5的分数然后我看网上的大佬分享的算法中,大部分都是用进制的算法来解决这个问题
这个进位的方法主要就是说因为遇到期的话,当地人认为他是不吉祥的,所以说要跳过,那么从0到9。10个数字去掉一个7还剩九个数字
所以说我们就可以用进位的方法来进行计算原本的是十进制,我们现在将它模拟成为是九进制的算法
所以说我们就可以用进位的方法来进行计算原本的是十进制,我们现在将它模拟成为是九进制的算法
但是我们需要有一个判断,就是当我们获取这个数字的每一位上的数字都要判断它是不是比七要大,如果他要是比七要大的话,那我们就可以认为他之内的数字是包含不吉利数字七,所以我们要减减减减,就是将这个数字往小了算,往小了算了,意思就是说我们把这个不吉祥的数字给他隐藏掉,也就是说给他吃掉
然后我们就可以根据十进制的算法来进
import java.util.Scanner; /** * @Author 陈平安 * @Date 2022/8/29 9:25 * @PackageName:PACKAGE_NAME * @ClassName: Main * @Description: TODO * @Version 1.0 */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt();//获取数量 for (int i = 0; i < num; i++) { System.out.println(test(scanner.nextLong())); }//这个部分也是有大坑,不要不要看这个案例,只是给了两个数据, // 但其实是他有可能是给零个数据给一个数据也有可能给两个数据。 // 所以说这个地方用for循环获取数据是比较靠谱的,不要去定量的, // 就是定义两个数据,然后等待着给他输入数据这样的话会扣很多的分数, // 所以说在没有明确他会给几个。案例的时候一定要记得用for循环然后就会显得更加的 //灵活 //********************************* //还有就是NextLong()这个东西,因为扩充数据范围,使用到long所以以前习惯都是NextInt. //一时间编译只有70分,查了半天才发现 } //然后下面这个函数用的是一个进位法, // 因为如果用暴力算法也能算出来,只不过它的分数是相当的低, // 像我这次用的暴力算法只得了20分,就相当于是得到了1/5的分数 // 然后我看网上的大佬分享的算法中,大部分都是用进制的算法来解决这个问题 public static long test(long a) { long sum = 0; int index = 0; long remain = 1; while (a > 0) { remain = a % 10; if (remain >= 7) { remain--; } //这个进位的方法主要就是说因为遇到期的话, // 当地人认为他是不吉祥的,所以说要跳过, // 那么从0到9。10个数字去掉一个7还剩九个数字 //所以说我们就可以用进位的方法来进行计算原本的是十进制, // 我们现在将它模拟成为是九进制的算法 //但是我们需要有一个判断,就是当我们获取这个数字的每一位上的数字都要判断它是不是比七要大, // 如果他要是比七要大的话,那我们就可以认为他之内的数字是包含不吉利数字七, // 所以我们要减减减减,就是将这个数字往小了算,往小了算了, // 意思就是说我们把这个不吉祥的数字给他隐藏掉,也就是说给他吃掉 sum += remain * Math.pow(9, index); index++; a /= 10; ///然后我们就可以根据十进制的算法来进 } //System.out.println(sum); return sum; } }
//还有就是NextLong()这个东西,因为扩充数据范围,使用到long所以以前习惯都是NextInt.
//一时间编译只有70分,查了半天才发现