题目链接:
解题思路:
使用运算符 % 与 / 直接进行逆序打印即可
注意事项:
- 注意存在下面的情况:
要求输入30,逆序输出03,而不是3
- 解决方法是:
在printf ( ) 函数的格式化控制符中设置俩个 %d
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int data = 0;
cin >> data;
printf("%d%d",data%10,data/10);
return 0;
}
题目进阶:
【参考代码(方法一)】:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int data = 0;
cin >> data;
printf("%d%d%d%d",data%10,data%100/10,data%1000/100,data/1000);
return 0;
}
【方法二】:
如果题目要求逆序输出位数更多的整数的话,比如10位,15位等整数,
那么上面这种方法就太过复杂,
所以我们也可以使用数组的方法去解决:
【参考代码】:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char arr[4] = { '0' };
for (int i = 0; i < 4; i++)
{
cin >> arr[i];
}
for (int j = 3; j >= 0; j--)
{
cout << arr[j];
}
return 0;
}
- 这里有一个注意点:
一般此类题目利用数组去解决的话,一般是要使用 char 类型数组,
对于 int 类型数组,
尽管可以使用,但是在输入时如果数字与数字之间不添加空格的话,
会把多个数字认为是同一个数字
而使用 char 类型数组则没有这种顾虑
【方法三:利用 string 来实现 n 位数的逆序】:
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main( )
{
string arr;
cin >> arr;
int now = 0;
for(int i = 0;i < arr.length();i++)//该循环用来将字符数组中的字符数字转换为int类型的数字,是必不可少的一个环节
{
now = now * 10 + arr[i] - '0';
}
int rev = 0;
for(int j = arr.length()-1;j >= 0;j--)//不要忘了j的初始值要减去一
{
rev = rev * 10 + arr[j] - '0';
//该循环用来实现逆序打印
}
cout << rev;
return 0;
}