Pony @ 2016-11-26 18:37:49
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int y;
char a[1000];
gets(a);
y=strlen(a);
if(a[0]=='-')
{
cout<<a[0];
for(int i=y-1;i>=1;i--)
{
if(a[i]=='0')
continue;
cout<<a[i];
}
}
else{
for(int i=y-1;i>=0;i--)
{
if(a[i]=='0')
continue;
cout<<a[i];
}
}
return 0;
}
by PTC06 @ 2016-11-26 20:34:29
你这样去除0是错的。题目要求的是使最后得数的最高位上不是0,而你把全部0都删了。
by PTC06 @ 2016-11-26 20:35:00
@lg5232
by JK_spc @ 2016-11-26 21:57:53
#include<cstdio>
#include<cstring>
char s[15];
int main(){
gets(s);//读数
int len=strlen(s);//求长度
bool flag;//用来检验是否有‘-’号
if(s[0]=='-'){
flag=true;
printf("-");//如果有‘-’号,就输出‘-’,把flag标记为真(表示有‘-’号)
}
while(s[len--]=='0'){}//从后往前看高位是否为0,是就把下表往前移一位,不是就跳出
while(len>0) printf("%c",s[len--]);//从后往前输出去0后的答案
if(!flag) printf("%c",s[0]);//如果有-号,就不管,没有-号,就把是s[0]输出
return 0;
}
by JK_spc @ 2016-11-26 22:00:18
刚才发错了 sorry
下面正解
====================
#include<cstdio>
#include<cstring>
char s[15];
int main(){
gets(s);//读数
int len=strlen(s)-1;//求长度
bool flag;//用来检验是否有‘-’号
if(s[0]=='-'){
flag=true;
printf("-");//如果有‘-’号,就输出‘-’,把flag标记为真(表示有‘-’号)
}
while(s[len]=='0'){len--;}//从后往前看高位是否为0,是就把下表往前移一位,不是就跳出
while(len>0) printf("%c",s[len--]);//从后往前输出去0后的答案
if(!flag) printf("%c",s[0]);//如果有-号,就不管,没有-号,就把是s[0]输出
return 0;
}
by JK_spc @ 2016-11-26 22:06:13
附一个stack的做法,及供参考
=======================
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
stack<char>mystack;
int main(){
char s; bool flag;
while(cin>>s){
if(s=='-'){
flag=1;
continue;
}
mystack.push(s);
}
if(flag) printf("-");
while(!mystack.empty()&&mystack.top()=='0') mystack.pop();
while(!mystack.empty()){
printf("%c",mystack.top());
mystack.pop();
}
return 0;
}
by ezoi_px @ 2016-12-02 13:10:23
最简单的做法:
#include <iostream>
using namespace std;
int main()
{
int n,m=0,x;
cin>>n;
x=n;
if (n<0) n=-n;
while (n!=0)
{
m=m*10+n%10;
n/=10;
}
if (x<0) cout<<-m;
else cout<<m;
}