题目描述
Birdfly是一位优秀的acmer,他自幼都数学有着浓烈的兴趣。作为一名集训队员,总爱思考一些新奇的问题,寻求不同的解题方法。
Birdfly一直坚信freshmen的潜力是无穷的!因为你们是ZZULI ACM的未来!ACM的题目并不是那么简单,但这一题so easy!^_^
一天晚上,birdfly躺在床上毫无睡意……他想,任意给你一个整数,这个数可能很大(最长不超过100位),你能求出它的逆转数吗?
逆转数定义如下:
1.一个末尾没有0的整数,它的逆转数就是各位数字逆序输出;
2.一个负数的逆转数仍是负数;
3.一个末尾有0的整数,它的逆转数如同下例:reverse (1200) = 2100。
看着birdfly难以入睡,我只好求助于聪明的你编程实现这个问题,相信你一定能帮上忙的!
输入
输入数组有多组, 每组测试实例包含一个大数且占一行。
输出
对每组测试实例,输出它的逆转数。每组占一行。
#include<iostream> #include<cstdio> #include<algorithm> #include<string> using namespace std; /* 不得不说这道题浪费我很多时间,主要是基础不够熟练。 /************************思路如下: /************************先讨论末尾是否有零 /************************if(有0),讨论正负; /************************if(没0),亦论正负; */ void fun(string &s) { int t = s.length()-1; if (s[t] != '0') { if (s[0] != '-') { reverse(s.begin(), s.end()); } else { reverse(s.begin() + 1, s.end()); } } if (s[t] == '0') { int i,j=0; for (i = t; i >= 0; i--)//找到从后往前第一个不为0的数 { j++; if (s[i] != '0') break; } if (s[0] != '-') { reverse(s.begin(), s.end()-j+1); } else { reverse(s.begin() + 1, s.end()-j+1); } } } int main() { string s; while (cin>>s) { fun(s); cout<<s<<endl; } //system("pause"); return 0; }