标题:关于用递归法求一个数的反向值如:123取反321
只看楼主
a451410
Rank: 2
等 级:论坛游民
帖 子:34
专家分:48
注 册:2018-3-4
结帖率:83.33%
已结贴  问题点数:1 回复次数:7 
关于用递归法求一个数的反向值如:123取反321
为什么我这个程序运行后直接结束,是不是我思路错了?还是哪里有问题,编译器并没有报错,不过有警告;TAT反正我也看不懂

#include <stdio.h>

int ret(int n,int m);

void main()
{
    double x,y;
    printf("***************************************************************\n");
    printf("输入欲取反的整数(若输入小数则只取整数部分),输入负数结束程序:\n");
    printf("键入的数值为:");
    scanf("%lf",&x);
    while(x==0)
    {
        y=ret(x,0);
        printf("该数取反后为:%.0lf\n\n",y);
        printf("***************************************************************\n");
        printf("输入欲取反的整数(若输入小数则只取整数部分),输入负数结束程序:\n");
        printf("键入的数值为:");
        scanf("%lf",&x);
    }
    return 0;
}

int ret(int n,int m)
{
    if(n<10)
    {
        m= 10*m+n%10;
        return m;
    }

    m= n%10+10*m;
    n= (n-n%10)/10;
    m= ret(n,m);
    return m;
}
搜索更多相关主题的帖子: 取反 int printf 输入 整数 
2018-03-20 20:24
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:1 
while(x==0)
你不是判断x==0才执行吗,输入非0值肯定退出啊
2018-03-20 20:42
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
#include <stdio.h>

int ret(int n,int m);

int main()
{
    double x,y;
    printf("***************************************************************\n");
    printf("输入欲取反的整数(若输入小数则只取整数部分),输入负数结束程序:\n");
    printf("键入的数值为:");
    scanf("%lf",&x);
    while(x!=0)
    {
        y=ret(x,0);
        printf("该数取反后为:%.0lf\n\n",y);
        printf("***************************************************************\n");
        printf("输入欲取反的整数(若输入小数则只取整数部分),输入负数结束程序:\n");
        printf("键入的数值为:");
        scanf("%lf",&x);
    }
    return 0;
}

int ret(int n,int m)
{
    if(n==0)
        return m;
    return ret(n/10,n%10+10*m);
}
2018-03-20 20:49
a451410
Rank: 2
等 级:论坛游民
帖 子:34
专家分:48
注 册:2018-3-4
得分:0 
回复 2楼 word123
感谢。粗心了。。(つд⊂)
2018-03-20 20:57
话宝宝
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:20
注 册:2018-3-20
得分:0 
回复 楼主 a451410
#include <stdio.h>

int ret(int n);

int main(void)
{
   
    int x;
    printf("请输入一个数\n");
    scanf("%d",&x);
    ret(x);
    return 0;
}

int ret(int n)
{
    int m=0;
    while(n)
    {
        m=m*10+n%10;
        n/=10;
    }
    printf("%d\n",m);
    return 0;
}

这是我自己写的,才学。不知道什么递归法哎,不过你那个程序有几个错误是显而易见的:1低精度的自动转换为高精度,你传入子函数中的m,n都为双精度浮点型,double型不能取余。2子函数中的m也没有赋初值,3算法也不对吧,也许是什么递归法吧,不懂。
2018-03-20 21:01
a451410
Rank: 2
等 级:论坛游民
帖 子:34
专家分:48
注 册:2018-3-4
得分:0 
回复 5楼 话宝宝
额(⊙o⊙)…,不是啊。你这个求不出来取反啊,输入123不能输出321吧。我用double是有用的为了把输入的数强制转换为整形,为了健壮性,哈哈,以后你学到递进就明白了。同刚学,共勉
2018-03-20 21:13
话宝宝
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:20
注 册:2018-3-20
得分:0 
回复 6楼 a451410
[local]1[/local]
2018-03-21 09:18
话宝宝
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:20
注 册:2018-3-20
得分:0 
回复 6楼 a451410
可以输出
2018-03-21 09:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485451-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.248627 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved