本来这个题目很简单的,就是情况要考虑细致,比如0,0.0,0/1,0%,100.001,100/100等,这些的反转都可以很简单实现出来,具体我就不讨论了。
但是我做这道题的时候我遇到一个问题,就是在本地测试完全没有任何问题,但是提交到OJ上的时候却会出现RE或者WA(当然不是我的思路啊或者代码有什么问题),后来经我反复思考,觉得问题出在我使用了scanf("%c",&xxx[]);来读取字符串,具体造成RE的原因还没弄懂,之后弄懂了再更新在文章下面。
解决方法:我将原本的读取方式换成gets(xxx);数据就全部A了。
代码贴在下面:
#include <stdio.h>
#include <string.h>
/*********************************
*这个是我后来修改通过的代码
**********************************/
int main(){
char data[100]={0};
int i=0,flag=0,symbol,j;
gets(data);
while(i<strlen(data)){
if(data[i]>'9'||data[i]<'0'){
symbol=i;
switch(data[i]){
case '.':flag=1;break;
case '/':flag=2;break;
case '%':flag=3;break;
}
}
i++;
}
int len=i-1;
if(0==flag){
for(j=len;j>0&&(data[j]=='0');j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
}
else if(1==flag){
for(j=symbol-1;j>0&&data[j]=='0';j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
printf(".");
for(j=symbol+1;j<len&&data[j]=='0';j++);
if(j<=len){
int k=len;
while(k>=j){
printf("%c",data[k]);
k--;
}
}else{printf("0");}
}
else if(2==flag){
for(j=symbol-1;j>0&&data[j]=='0';j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
printf("/");
for(j=len;j>symbol+1&&data[j]=='0';j--);
if(j>=symbol+1){
while(j>=symbol+1){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
}else if(3==flag){
for(j=symbol-1;j>0&&data[j]=='0';j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
printf("%%");
}
return 0;
}
错误的版本:
#include <stdio.h>
/*********************************
*这个是RE的代码,使用了scanf读取字符串
**********************************/
int main(){
char data[100]={0};
int i=0,flag=0,symbol,j;
while(scanf("%c",&data[i]),data[i]!='\n'){
if(data[i]>'9'||data[i]<'0'){
symbol=i;
switch(data[i]){
case '.':flag=1;break;
case '/':flag=2;break;
case '%':flag=3;break;
}
}
i++;
}
int len=i-1;
if(0==flag){
for(j=len;j>0&&(data[j]=='0');j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
}
else if(1==flag){
for(j=symbol-1;j>0&&data[j]=='0';j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
printf(".");
for(j=symbol+1;j<len&&data[j]=='0';j++);
if(j<=len){
int k=len;
while(k>=j){
printf("%c",data[k]);
k--;
}
}else{printf("0");}
}
else if(2==flag){
for(j=symbol-1;j>0&&data[j]=='0';j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
printf("/");
for(j=len;j>symbol+1&&data[j]=='0';j--);
if(j>=symbol+1){
while(j>=symbol+1){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
}else if(3==flag){
for(j=symbol-1;j>0&&data[j]=='0';j--);
if(j>=0){
while(j>=0){
printf("%c",data[j]);
j--;
}
}else{printf("0");}
printf("%%");
}
return 0;
}
是什么原因导致的呢?
待更新。。。
网友评论