这道题似曾相识,之前也做过一道类似这种‘阴险’的题目;
回到正题——先给出题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=1266
我用字符串做了这道题,这道题除了题目要求,主要从几个方面考虑;
Case 1:-1200 这种情况是题目负数和末尾0两种情况的结合,因此需要结合判断,错误输出是 -0021
Case 2: -0012or 0012 这个就是要把前置多余的0去掉 ,正负都要去
Case 3: 00的话可能需要单独判断,也可能不需要……看怎么写吧。
代码很乱还没整理
#include <iostream>//1266 Reverse Number
#include <string>
using namespace std;
void Reverse(string &str)
{
int len=str.length();
char tmp;
for(int i=0;i<len/2;i++)
{
tmp=str[i];
str[i]=str[len-i-1];
str[len-i-1]=tmp;
}
}
int main()
{
int t,zero;
string str,res;
cin>>t;
while(t--)
{
cin>>str;
zero=0;
if(str.length()==1 && str[0]=='0') {cout<<zero<<endl;continue;}
if(str[0]=='-')
{
str.erase(0,1);
while(str[0]=='0' && str.length()!=1) str.erase(0,1);
int len=str.length();
while( str[--len]=='0' ) { str.erase(len,1); zero++; }
Reverse(str);
cout<<"-"<<str;
}
else
{
while(str[0]=='0') str.erase(0,1);
int len=str.length();
while( str[--len]=='0' ) { str.erase(len,1); zero++; }
Reverse(str);
cout<<str;
for(int i=1;i<=zero;i++)
cout<<"0";
}
cout<<endl;
}
return 0;
}