这是代码
#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;
}