标签:
#include <stdio.h> int divide(int N ,int *a) { int i = 0; while(N) { a[i++] = N%2; N /= 2; } return i; } int IsLast(int i,int *a) { int k ;
//第i位前面有1,则表示a[i]不是最后一个1 for(k=0;k<i;k++) if(a[k]) return 0; return 1; } void recur(int N) { int i,t; int a[16]; if(N == 0 || N == 2) { printf("2(%d)",N); return; } else if(N == 1) { printf("2"); return; }else{//N > 2 printf("2("); t = divide(N,a); i = t-1; while(i >= 0) { if(a[i]) { recur(i);//幂 if(!IsLast(i,a))//不是最后一个要带加号 printf("+"); } i --; } printf(")"); } } int main() { int N,i,t; int a[16]; scanf("%d",&N); //先对N进行幂的分解,然后对幂进行递归分解 t = divide(N,a); i = t-1; while(i >= 0) { if(a[i]) { recur(i);//幂 if(!IsLast(i,a))//不是最后一个1 printf("+"); } i --; } printf("\n"); return 0; }
标签:
原文地址:http://www.cnblogs.com/520xiuge/p/5150853.html