题目1095:2的幂次方 练习递归

本文介绍了一种将正整数转换为仅包含数字0和2的指数形式的方法,并提供了一个Java实现示例。该方法递归地将数字转换为二进制表示,再进一步转化为所需的指数形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

    Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0。

    Let's present a^b by the form a(b).Then 137 is presented by 2(7)+2(3)+2(0). Since 7 = 2^2 + 2 + 2^0 and 3 = 2 + 2^0 , 137 is finally presented by 2(2(2)+2 +2(0))+2(2+2(0))+2(0). 
 
    Given a positive number n,your task is to present n with the exponential form which only contains the digits 0 and 2.

输入:

    For each case, the input file contains a positive integer n (n<=20000).

输出:

    For each case, you should output the exponential form of n an a single line.Note that,there should not be any additional white spaces in the line.

样例输入:
1315
样例输出:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

package 上海交大;

import java.util.Scanner;

public class 幂次方1095 {
static int n;
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while (s.hasNextInt()) {
n = s.nextInt();
System.out.println(f(n));
}
}
static String f(int n) {
StringBuffer sb = new StringBuffer();
if (n < 8) {
switch(n){
case 0: return "0";
case 1: return "";
case 2: return "2";
case 3: return "2+2(0)";
case 4: return "2(2)";
case 5: return "2(2)+2(0)";
case 6: return "2(2)+2";
case 7: return "2(2)+2+2(0)";
}
}else{
String temp = Integer.toBinaryString(n);
int len = temp.length();
for(int i=0; i<len; i++){
if(temp.charAt(i) == '1'){
if(i!=0)
sb.append("+");
sb.append("2(");
sb.append(f(len-i-1));
sb.append(")");
}
}
}
return sb.toString().replaceAll("\\(\\)", "");
}
}


转载于:https://www.cnblogs.com/love533/archive/2012/04/05/2433528.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值