二进制_递归_题目1095:2的幂次方

本文探讨了如何将任意正整数以仅包含数字0和2的指数形式进行表示,并提供了一个具体的示例代码实现。

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:410

解决:267

题目描述:

    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)
来源:
2006年上海交通大学计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7818-1-1.html

代码清单~

#include <stdio.h>
void foo(short int n){
    int flag=0;
    for(int i=15; i>=0; i--){
        if(!((n>>i)&1)) continue;
        if(flag==1) printf("+");
        switch(i){
            case 0: printf("2(0)");break;
            case 1: printf("2");break;
            case 2: printf("2(2)");break;}
        if(i>2){
            printf("2(");
            foo(i);
            printf(")");}
        flag=1;}}

int main(){
    short int input;
    while(~scanf("%d",&input)){
        foo(input);
        printf("\n");}
    return 0;}

/**************************************************************
    Problem: 1095
    User: denallo
    Language: C
    Result: Accepted
    Time:10 ms
    Memory:904 kb
****************************************************************/



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值