输入整数(0-30)分解成所有整数之和。每四行换行一次。
一种方法是通过深度优先枚举出解。通过递归的方式来实现。
#include <stdio.h> #include <string.h> #define MAXN 30 #define MAXString 64 int Terms[MAXN]; int N; int Count; void Search(int Remainder,int Start,int nTerm) { int i; if(Remainder ==0 ){ Count++; if(Count%4!=1) printf(";"); printf("%d=%d",N,Terms[0]); for(i=1;i<nTerm;i++) printf("+%d",Terms[i]); if(Count%4==0) printf(" "); } else { for(i=Start;i<=Remainder;i++){ Terms[nTerm]=i; Search(Remainder-i,i,nTerm+1); } } } void Test1() { scanf("%d",&N); Count=0; Search(N,1,0); if(Count%4!=0) printf(" "); } void Search1(int Remainder, int Start,char *STerms) { int i; char Tmps[MAXString]; strcpy(Tmps,STerms); for(i=Start;i<=Remainder;i++) { if(Remainder-i>=i) { sprintf(Tmps+strlen(STerms),"%d+",i); Search1(Remainder-i,i,Tmps); }else if(Remainder-i==0) { sprintf(Tmps+strlen(STerms),"%d ",i); Count++; if(Count%4!=1) printf(";"); printf("%s",Tmps); if(Count%4==0) printf(" "); } } } void Test2() { char STerms[MAXString]=""; int N; Count=0; scanf("%d",&N); Search1(N,1,STerms); if(Count%4!=0) printf(" "); }
第二种方法是试探下一次是否达到边界,避免了第一种方法的多次无效递归。

质因数分解,输入大整数long int并分解其为素数的乘积
//整数分解成素因子
void Decomposed(long int data){
int i;
int si=0;
int temp=data;
for(i=2;i<=temp;i++){
if(temp!=i)
{
while(true){
if(temp%i==0 && temp/i!=1){
printf("%d*",i);
temp/=i;
//printf("temp=%d,i=%d
",temp,i);
}else if(temp%i==0 && temp/i==1){
printf("%d",i);
temp/=i;
//printf("temp=%d,i=%d
",temp,i);
}
else
break;
}
}else{
printf("%d
",i);
si=1;
}
}
if(si==0)
printf("
");
}
void TestDecomposed(){
long int x=1000234;
printf("%ld=",x);
Decomposed(x);
}
