2的次幂表示

 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 }
原文地址:https://www.cnblogs.com/LeoFeng/p/4311992.html