正文

一道ACM题目 练练递归2009-12-09 06:41:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/shenjinggege/50294.html

分享到:

题目: 一个数字链由数字的每位平方相加而成。 例子:44->32->13->10->1->1  .4*4+4*4=32,3*3+2*2=13  ......... 给你一个数字N计算出N(包括N)以内的所有数据链最后的数是1的个数。1 <=N <=10000所有子函数都写成递归的哦!样式输出input N:10011013192328313244496870798286919497100 #include <stdio.h>#include <conio.h>#include <assert.h>#define SQUARE(a) a*aint main(){       int n;    int i;    void num2digits(int n, int *digits,int *count);    int recursive(int n);    puts("input N:");    scanf("%d",&n);    for(i=1;i<=n;i++)    {        if(recursive(i)==1)            printf("%d\n",i);    }    getch();    return 0;}void num2digits(int n, int *digits,int *count){    if(n>0)    {        *count+=1;            digits[0]=n%10;        num2digits(n/10,digits+1,count);    }}int recursive(int n){    int squaresum=0;    int num_digits=0;    int arr[7];    int i;    if(n>=10)    {        num2digits(n, arr, &num_digits);                        for(i=0;i<num_digits;i++)            squaresum+=SQUARE(arr[i]);        return recursive(squaresum);    }    else        return n;}    

阅读(2613) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册