例如:6=5+1
6=4+2
6=4+1+1
6=3+3
6=3+2+1
6=3+1+1+1
6=2+2+2
6=2+2+1+1
6=2+1+1+1+1
6=1+1+1+1+1+1
localhuafen.h
- # ifndef _LOCAL_HUAFEN_H_
- # define _LOACL_HUAFEN_H_
- #define TRUE 1
- #define FALSE 0
- int panduan(char *, int);
- void HuaFen(int, char *);
- void show(char *, int);
- # endif
huafen.c
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include"local_huafen.h"
- int total=0;
- void show(char *ans,int total)
- {
- int len = strlen(ans)-1;
- int index=0;
- printf("%d = ",total);
- for( ;index < len; index++)
- printf("%d + ",ans[index]-'0');
- printf("%d\n",ans[index]-'0');
- }
- int panduan(char *ans ,int len)
- {
- int index = 0;
- if(len<1)
- return FALSE;
- for( ; index< len-1 ;index++)
- if(ans[index] < ans[index+1])
- return FALSE;
- return TRUE;
- }
- void HuaFen(int to,char *ans)
- {
- static count ;
- int in = to;
- if(to>=1) {
- for( ; in >=1; in--){
- ans[count++] = in+'0';
- if(panduan(ans,count)==TRUE)
- HuaFen(to-in,ans);
- ans[--count] = 0;
- }
- } else
- show(ans,total);
- }
- int main()
- {
- char * ans=NULL;
-
- printf("please input the intger:");
- scanf("%d",&total);
- if(total >0) {
- ans = malloc((total+1) * sizeof *ans);
- HuaFen(total,ans);
- free(ans);
- } else
- printf("please input zheng zheng shu!!!\n");
- ans = NULL;
- return 0;
- }
输入小于或等于0的数: