在许多编程题中,有很多都要求逆序输出一个数或者一个字符串,在c++的学习中,随着学习的深入,实现方法就会多了起来
所以大致有以下几种实现方式
1.暴力拆数,再相加:适用于位数极其小,要求逆序之后的结果为数字;
/*程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321 */
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d,e;
cin>>a;
b=a/100;
c=a%100/10;
d=a%10;
if(d>0)e=d*100+c*10+b;
else if(c==0)e=b;
else e=c*10+b;
cout<<e;
return 0;
}
2.函数递归调用:豪用,易实现,但是容易运行超时(函数call过多)
/*输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如:1234。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si。
输入样例:
-600
输出样例:
fu liu ling ling */
#include <iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{void g(int a);
int m;
cin>>m;
if(m<0)
{
m=-m;
cout<<"fu ";
g(m);
}
else
{
g(m);
}
}
void g(int a)
{
if(a<10)
{
switch (a)
{
case 0:
cout<<"ling";
break;
case 1:
cout<<"yi";
break;
case 2:
cout<<"er";
break;
case 3:
cout<<"san";
break;
case 4:
cout<<"si";
break;
case 5:
cout<<"wu";
break;
case 6:
cout<<"liu";
break;
case 7:
cout<<"qi";
break;
case 8:
cout<<"ba";
break;
default:
cout<<"jiu";
}
}
else{
g(a/10);
a=a%10;
switch (a)
{
case 0:
cout<<" ling";
break;
case 1:
cout<<" yi";
break;
case 2:
cout<<" er";
break;
case 3:
cout<<" san";
break;
case 4:
cout<<" si";
break;
case 5:
cout<<" wu";
break;
case 6:
cout<<" liu";
break;
case 7:
cout<<" qi";
break;
case 8:
cout<<" ba";
break;
default:
cout<<" jiu";
}
}
}
3.字符数组/字符串逆序遍历:也豪用,注意字符数组内要存\0
/*将一个字符串中的字符逆序存放。如字符串为“abcde",则逆序存放后应为"edcba"。
输入格式:
在一行中输入一个长度不超过20的字符串、并以回车结束。
输出格式:
在一行中输出逆序后的字符串。
输入样例:
abcde
输出样例:
edcba */
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1;
cin >> s1;
int j;
j=s1.size();
char s2[20]={'a'};
for(int i=0;i<j;i++)
{
s2[i]=s1[j-1-i];
}
cout<<s2;
}