[ALGO-12] 幂方分解

来源:互联网 发布:好用的修容产品知乎 编辑:程序博客网 时间:2024/05/17 23:09

算法训练 幂方分解  
时间限制:1.0s   内存限制:256.0MB
问题描述
  任何一个正整数都可以用2的幂次方表示。例如:
  137=27+23+2
  同时约定方次用括号来表示,即ab 可表示为a(b)。
  由此可知,137可表示为:
  2(7)+2(3)+2(0)
  进一步:7= 22+2+2(21用2表示)
  3=2+2
  所以最后137可表示为:
  2(2(2)+2+2(0))+2(2+2(0))+2(0)
  又如:
  1315=210 +28 +25 +2+1
  所以1315最后可表示为:
  2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入格式
  输入包含一个正整数N(N<=20000),为要求分解的整数。
输出格式
  程序输出包含一行字符串,为符合约定的n的0,2表示(在表示中不能有空格)
分析:递归求解

import java.util.Scanner;public class Main {static int[] nums = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048,4096, 8192, 16384 };public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int n = scanner.nextInt();showResult(n, 14);System.out.println();}}/** *  * @param n *            数值 * @param index *            nums数组的下标 */private static void showResult(int n, int index) {if (index == 0) {System.out.print("0");return;}if (index == 1) {System.out.print("2(0)");return;}while (index >= 0) {if (n - nums[index] >= 0) {if (index != 1) {System.out.print("2(");showResult(index, index);System.out.print(")");} else {System.out.print("2");}n -= nums[index];if (n != 0) {System.out.print("+");showResult(n, index);return;}}index--;}}}

0 0
原创粉丝点击