2的幂次方

题目描述

    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.

示例1

输入

复制

1315

输出

复制

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
#include <iostream>

using namespace std;

int array[16] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768};
string string1[3] = {"", "2(0)", "2"};

string func(int n) {
    if (n < 3) {
        return string1[n];
    } else {
        for (int i = 14;; i--) {
            if (n > array[i]) {
                return func(array[i]) + "+" + func(n - array[i]);
            } else if (n == array[i]) {
                return "2(" + func(i) + ")";
            }
        }
    }
}

int main() {
    int n;
    while (EOF != scanf("%d", &n)) {
        cout << func(n) << endl;
    }
    return 0;
}

 

上一篇:Acwing:137. 雪花雪花雪花


下一篇:NYOJ-469 擅长排列的小明 II AC 分类: NYOJ 2014-01-02 22:19 159人阅读 评论(0) 收藏