C++一本通1160倒序数字符串无法识别答案,求解

这是代码

#include<bits/stdc++.h>
using namespace std;    
char ch[200];
char dx(int x)
{
    if(x==0)
    return ch[0];
    else
    {
    cout<<(int)(ch[x]-'0'); 
    return dx(x-1);
    }
}
int main()
{
    cin.getline(ch,200);
    cout<<int(dx(strlen(ch)-1)-'0');
    return 0;
 }

你自己的代码在VS2017上,测试用例“123”,是可以正确输出“321”的。
建议用int或long long存储明确为整数的数字,而不要用char[],除非特殊情况,比如值大小可能超过2^64。

如果只是逆转整数,可以参考这个:

int reverseNum(int n)
{
    int res = 0;

    while (n > 0)
    {
        res = res * 10 + (n % 10);
        n /= 10;
    }
    return res;
}

int main()
{
    int n;
    
    while (cin >> n) {
        cout << reverseNum(n) << endl;
    }
    return 0;
}

这个看不出问题啊

cout<<(int)(ch[x]-'0'); 决定了你倒序输出时,只能输出基于字符'0'的偏移值,如果是ch[x]是数字,则打印正确的数字;如果是字母或者其他非数字字符,那就肯定显示不正常。要如何解决这个问题,取决于你的输入,一种方式是限制输入只能是数字字符,另一种就是不要将char通过减去'0'来转换为int,而是直接打印char(即改为cout << ch[x];)。

针对你的问题:倒序数字符串。如果不要求用递归,还有很多更简便的方法:
1)使用库函数reverse逆转string
当然也可以自行用双指针,交换首尾元素

int main()
{
    string s;
    while (getline(cin, s)) // 支持多行输入
    {
        reverse(s.begin(), s.end());
        cout << s;
    }
    return 0;
}

2)从末尾到开头输出

int main()
{
    string s;

    while (getline(cin, s)) // 支持多行输入
    {
        for (int i = s.size() - 1; i >= 0; i--) {
            cout << s[i];
        }
        cout << endl;
    }
    return 0;
}

img

img