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 }