如何用c语言将一个数分解成加数相加的形式?

如题所述

/*我特地到CSDN给你问的 刚来查看 发现有团队用我在论坛的帖子的回复给你答案了 不过我还是把最佳的答案回复给你吧!*/
#include <stdio.h>

#include <stdlib.h>
void print(int res[], int num) {
static int L=0;
L++;
printf("%8d:",L);
for (int i=0;i<num;++i) {
printf(" %d", res[i]);
}
printf("\n");
}
void split(int n, int m) {// n表示总数,m表示最大因子
static int res[100];// 保存结果
static int num=-1;// 当前因子下标

if (n<m || n<0 || m<1) return;
num++;
if (0==n) {// 递归终止条件,为0不可再分,直接输出
print(res,num+1);
num--;
return;
} else {
if (n==m) {// 不拆,直接输出
res[num]=m;
print(res,num+1);
num--;
} else {
// 拆分出第一个
res[num]=m;
n=n-m;

if (m>n) m = n; // 最大因子不可能大于总数

for (int i=m;i>=1;--i) {// 循环,第二个因子可以继续拆分,而且按照最大因子不同可以拆分成多个
split(n,i);
}
num--;
}
}
}
void Split(int n) {
if (n<=0) return;
if (100<n) {
printf("Up to 100\n");
return;
}
for (int i=n;i>=1;--i) {
split(n, i);
}
}
int main(int argc,char **argv) {
int num;
scanf("%d",&num);
if (argc<=1) Split(num);
else if (argc>=3) split(atoi(argv[1]),atoi(argv[2]));
else Split(atoi(argv[1]));
return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答