数字反转
445. 数字反转 - AcWing题库
题目大意
输入一个数字,输出其各位数字反转的数,例如123,输出321。-380,输出-83。
思路
用字符串存储数据,然后单独处理正负数,还有末尾0。
#include<iostream>using namespace std;int main(){string s,res;cin>>s;if(s[0] != '-'){for(int i = s.size() - 1 ; i >= 0; i --){// //处理反转第一个为0的特殊情况if(!(s[i] == '0'&& res.size() == 0)){res +=s[i];}}}else{cout<<"-";for(int i = s.size() - 1 ; i > 0; i --){// //处理反转第一个为0的特殊情况if(!(s[i] == '0'&& res.size() == 0)){res +=s[i];}} }cout<<res;return 0;
}
感觉没有错,但是当样例为0的时候,什么也不输出。也说明了上述代码的逻辑不严谨。
上述代码加个特判当数据为0的时候,输出0,才算严谨。
- 可以用c++的算法库中的反转reverse(s.begin(),s.end())
更漂亮的写法
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{string s;cin>>s;if(s[0] == '-') {cout<<'-';s.erase(s.begin());//删除'-'号}//反转字符串reverse(s.begin(),s.end());//去除前导0while(s.size() > 1 && s[0] =='0') s.erase(s.begin()); cout<<s<<endl;return 0;
}
- 也可以用int类型存,对于负数输出符号,取相反数即可,不用处理前导零。对于正数,可以推测公式,每次*10,即使最高位为0,0X10也为0。
#include<iostream>
using namespace std;
int res;
int main()
{int n;cin>>n;if(n < 0 ){cout<<"-";n = -n;}while(n){res = res*10 + n%10;n /= 10;}cout<<res;return 0;
}