题解 B2028 【反向输出一个三位数】
题解
解法 1
虽然说题目上是要反向输出一个三位数,但是这个反向后的三位数并没有要求去掉前导
而进行字符串翻转,也有两种做法:一种是比较常规的使用
使用
for(int i=0;i<s.length()/2;++i) swap(s[i],s[s.length()-i-1]);
然后, C++ 里提供了
reverse(s.begin(),s.end());
还有一种做法,就是利用栈的性质,先进后出。使用
以外,因为这题都是三位数,所以直接
代码 1
#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
using namespace std;
typedef long long i64;
const int INF =2147483647;
stack <char> s; char c;
int main(){
while(isdigit(c=getchar())) s.push(c);
while(!s.empty()) putchar(s.top()),s.pop();
return 0;
}
解法 2
给点面子,人家毕竟是数字嘛。
但是这题翻转前后可能并不是常规意义的数字(可能会含有前导零什么的)。其实这一点并不会影响答案的正确性。我们输入数字后,每次除以
代码 2
#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
using namespace std;
typedef long long i64;
const int INF =2147483647; int w;
int main(){
up(0,2,i) w=w*10+(getchar()-'0');
up(0,2,i) putchar('0'+w%10),w/=10;
return 0;
}