题目1095:2的幂次方
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:397
解决:259
-
题目描述:
-
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)
#include"stdio.h" #include<string> #include<vector> using namespace std; void f(int n) { if(n==0) printf("0"); else { vector<int> v ; v.resize(0); int tag ; while(n!=0) { v.push_back(n%2); n/=2; } for(int i = 0 ; i <v.size();i++) { if(v[i]==1) { tag = i ; break; } } for(int i = v.size()-1;i>=0;i--) { if(v[i]==1) { if(i==1) printf("2"); else { printf("2("); f(i); printf(")"); } printf("+"); } } } return; } int main() { int n ; while(scanf("%d",&n)!=EOF) { f(n); printf("\n"); } return 0 ; }