1、将一整数逆序后放入一数组中(要求递归实现)
#include<stdio.h>
void convert(int *result, int n)
{
if(n>=10)
convert(result+1, n/10);
*result = n%10;
}
int main(int argc, char* argv[])
{
int n = 123456789, result[20];
convert(result, n);
printf("%d:", n);
for(int i=0; i<9; i++)
printf("%d", result[i]);
return getchar();
}2、求高于平均分的学生学号及成绩(学号和成绩人工输入)
double find(int total, int n)
{
int number, score, average;
scanf("%d", &number);
if(number != 0){
scanf("%d", &score);
average = find(total+score, n+1);
if(score >= average)
printf("%d:%d\n", number, score);
return average;
}else{
printf("Average=%d\n", total/n);
return total/n;
}
}
int main(int argc, char* argv[])
{
find(0, 0);
return getchar();
}
3、递归实现回文判断(如:abcdedbca就是回文)
int find(char *str, int n)
{
if(n<=1) return 1;
else if(str[0]==str[n-1]) return find(str+1, n-2);
else return 0;
}
int main(int argc, char* argv[])
{
char *str = "abcdedcba";
printf("%s: %s\n", str, find(str,
strlen(str)) ? "Yes" : "No");
return getchar();
}4、分解成质因数(如435234=251*17*17*3*2)
void prim(int m, int n)
{
if(m>n){
while(m%n != 0) n++;
m /= n;
prim(m, n);
printf("%d*", n);
}
}
int main(int argc, char* argv[])
{
int n = 435234;
printf("%d=", n);
prim(n, 2);
return getchar();
}5、大整数数相乘的问题。
void Multiple(char A[], char B[], char C[])
{
int TMP, In=0, LenA=-1, LenB=-1;
while(A[++LenA] != '\0');
while(B[++LenB] != '\0');
int Index, Start = LenA + LenB - 1;
for(int i=LenB-1; i>=0; i--)
{
Index = Start--;
if(B[i] != '0'){
for(int In=0, j=LenA-1; j>=0; j--)
{
TMP = (C[Index]-'0') + (A[j]-'0') * (B[i] - '0') + In;
C[Index--] = TMP % 10 + '0';
In = TMP / 10;
}
C[Index] = In + '0';
}
}
}
int main(int argc, char* argv[])
{
char A[] = "21839244444444448880088888889";
char B[] = "38888888888899999999999999988";
char C[sizeof(A) + sizeof(B) - 1];
for(int k=0; k<sizeof(C); k++)
C[k] = '0';
C[sizeof(C)-1] = '\0';
Multiple(A, B, C);
for(int i=0; C[i] != '\0'; i++)
printf("%c", C[i]);
return getchar();
}