![]()
1 #include<stdio.h>
2
3 void Power(int n);
4
5 int main()
6 {
7 int n;
8
9 while(scanf("%d",&n)!=EOF) //读取正整数未出错
10 {
11 Power(n);
12 printf("\n");
13 }
14
15 return 0;
16 }
17 /*********************************************************************************************************
18 ** 函数功能 : 把正整数用2的次幂表示
19 ** 函数说明 : 利用除2取余法把十进制正整数转换为二进制数,并用递归实现把正整数用2的次幂表示, 一边递归一边输出
20 ** 入口参数 : n : 要用2的次幂表示的正整数
21 ** 出口参数 : 无
22 *********************************************************************************************************/
23 void Power(int n)
24 {
25 int i=0,j=0;
26 int remainder; //用于记录余数
27 int location[32]; //用于记录除2取余法中余数1的位置
28
29 //除2取余法
30 while(n)
31 {
32 remainder=n%2; //得到除2的余数
33 if(remainder==1) //如果余数等于1
34 location[i++]=j; //记录1的位置
35 j++;
36 n/=2; //正整数除以2
37 }
38
39 //用递归实现,一边递归一边输出
40 for(j=i-1;j>=0;j--) //倒序取余
41 {
42 if(location[j]==0)
43 printf("2(0)");
44 else if(location[j]==1)
45 printf("2");
46 else if(location[j]==2)
47 printf("2(2)");
48 else
49 {
50 printf("2(");
51 Power(location[j]); //递归
52 printf(")");
53 }
54
55 if(j!=0)
56 printf("+");//如果不是最后一个就得输出 +
57 }
58 }