ganmu


私信TA

用户名:dotcpp0726067

访问量:3468

签 名:

等  级
排  名 1522
经  验 2809
参赛次数 0
文章发表 104
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

首先须知,在c++中:

1、当一个整数/10时,不会产生小数。即int/int != float。例如:123/10=12,而不是12.3

2、当一个整数%10时,产生的数是该数的末位。即:123%10=12......3,所以,此时输出的是3


明白这两点后我们就可以通过 /10 来使数据变小,通过 % 10 求出数据的每一位

例:我们想求123的每一位就可以:

123%10=3,123/10=12;12%10=2,12/10=1;1%10=1,1/10=0。

得到123的每一位分别是3,2,1

由此,即可开始调用递归函数来实现求解


注意事项:

1、在dfs1()中需在每次输出后面加上空格以达到题目输出要求
2、在主函数中调用完dfs1()后需要输出换行以达到题目输出要求

3、在dfs2()中,每次输出完后不需要加空格以达到题目要求
参考代码:

#include<iostream>

using namespace std;

void dfs1(int a)//输出每一位的数

{

    if (a > 0)//设置执行条件

    {

        dfs1(a / 10);//a每次向前挪动一位,即:1234->123->12->1

        cout << a % 10 << " ";//挪到最前面后,%10,同时往前逐层退出函数,每退一次,得到一个数值。即1%10=1;12%10=2;123%10=3;1234%10=4...

    }

}

void dfs2(int a)//输出倒排之后的数

{

    if (a > 0)//设置执行条件

    {

        cout << a % 10;//和上述情况相反,即:1234%10=4,输出。

        dfs2(a / 10);//再把数据往前挪动一位,即:1234/10=123...以此类推,最终得到反向输出的4321

    }

}

int main()

{

    int a;

    cin >> a;

    int b = a;//拿到a的值方便操作且不改变a本身

    for (int c = 1; c < 10; c++)//输入数不大于5位,所以此处需c<6,为防止数据超出,我选择c<10

    {

        b=b / 10;//每次进循环b的位数减小一位,直到最后b=0时,所得到的c就是b的位数

        if (b == 0)

        {

            cout << c << endl;//输出b的位数

            break;

        }

    }

    dfs1(a); cout << endl;

    dfs2(a);

    return 0;

}


 

0.0分

1 人评分

  评论区

  • «
  • »