九度OJ 1095:2的幂次方 (递归)

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:913

解决:626

题目描述:

    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年上海交通大学计算机研究生机试真题

思路:
需用递归来做,注意边界条件,2不应该被打印成2(0).


代码:

#include <stdio.h>
 
void present(int n)
{
    if (n == 0 || n == 2)
    {
        printf("%d", n);
        return;
    }
    int i;
    int a[20], c;
    for (i=0; n>0; i++)
    {
        a[i] = n%2;
        n /= 2;
    }
    c = i;
    for (i=c-1; i>=0; i--)
    {
        if (a[i] == 0)
            continue;
        if (i != c-1)
            printf("+");
        if (i == 1)
        {
            printf("2");
            continue;
        }
        printf("2(");
        present(i);
        printf(")");
    }
}
 
int main(void)
{
    int n;
 
    while (scanf("%d", &n) != EOF)
    {
        present(n);
        printf("
");
    }
 
    return 0;
}
/**************************************************************
    Problem: 1095
    User: liangrx06
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:912 kb
****************************************************************/


编程算法爱好者。
原文地址:https://www.cnblogs.com/liangrx06/p/5083937.html