九度OJ 1095: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.
- 样例输入:
-
1315
- 样例输出:
-
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
思路:
需用递归来做,注意边界条件,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("\n");
}
return 0;
}
/**************************************************************
Problem: 1095
User: liangrx06
Language: C
Result: Accepted
Time:0 ms
Memory:912 kb
****************************************************************/
编程算法爱好者。
浙公网安备 33010602011771号