洛谷P1010 Java解法

题目出处点这里
在这里插入图片描述思路:使用递归
例如对1315进行转化:1315 = 210 + (1315 - 210)
就像这样1315可以转化为210和(1315 - 210)两部分
因此问题变成先转化210再转化剩下的(1315 - 210)两大步骤
于是代码可以写成:先递归转化前一为2的k次幂的部分,再递归转化后一部分

**

代码有讲解:

package reintroduction_recursion;import java.util.Scanner;public class P1010 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();if (n == 1) {System.out.print("2(0)");}if (n == 2) {System.out.print("2");}if (n == 3) {System.out.print("2+2(0)");}if (n > 3) {j(n);}}public static void j(int n) {if (n <= 3) {return;}int power = 0;// 存储当前数字可以接受的最大次幂int start = 2;while (n >= start) {start = start * 2;power++;}n = n - start / 2;// 剩下需要转化的数System.out.print("2(");// 首先输出"2("// 如果最大次幂等于1、2、3就直接输出对应转化后的值if (power == 1) {System.out.print("2(0)");} else if (power == 2) {System.out.print("2");} else if (power == 3) {System.out.print("2+2(0)");} else if (power > 3) {j(power);// 如果不等于1、2、3且大于3就代表还可以化简}System.out.print(")");// 第一部分转化完毕,输出"("// 接下来转化剩下的部分n// 如果剩下的部分等于1、2、3直接输出转化后的值,注意带上"+"if (n == 1) {System.out.print("+2(0)");} else if (n == 2) {System.out.print("+2");} else if (n == 3) {System.out.print("+2+2(0)");} else if(n > 3){// 如果剩下部分的值不等于1、2、3且大于3,那么先加上"+",再继续递归转化剩下部分System.out.print("+");j(n);}}}

**


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部