https://www.luogu.org/problemnew/show/P1553

忘记给整数加上前导零去除的代码了。其实不去也可以,额外的进位用一个carry另外存起来就好。

#include<bits/stdc++.h>
using namespace std;
#define ll long long char s[]; int main(){
scanf("%s",s);
int n=strlen(s);
for(int i=;i<n;i++){
if(s[i]=='.'){
reverse(s,s+i);
reverse(s+i+,s+n);
int haveout=;
for(int j=;j<i;j++){
if(s[j]==''&&haveout==)
;
else{
printf("%c",s[j]);
haveout=;
}
}
if(haveout==){
printf("");
} printf(".");
int allzero=;
int last=;
for(int j=i+;j<n;j++){
if(s[j]!=''){
last=j;
allzero=;
}
} if(allzero){
printf("0\n");
}
else{
for(int j=i+;j<=last;j++){
printf("%c",s[j]);
}
printf("\n");
}
return ;
}
else if(s[i]=='/'){
reverse(s,s+i);
reverse(s+i+,s+n);
int haveout=;
for(int j=;j<i;j++){
if(s[j]==''&&haveout==)
;
else{
printf("%c",s[j]);
haveout=;
}
}
if(haveout==){
printf("");
} printf("/");
haveout=;
for(int j=i+;j<n;j++){
if(s[j]==''&&haveout==)
;
else{
printf("%c",s[j]);
haveout=;
}
}
if(haveout==){
printf("");
}
printf("\n");
return ; }
else if(s[i]=='%'){
reverse(s,s+i);
int haveout=;
for(int j=;j<i;j++){
if(s[j]==''&&haveout==)
;
else{
printf("%c",s[j]);
haveout=;
}
}
if(haveout==){
printf("");
} printf("\%\n");
return ;
}
} reverse(s,s+n);
int haveout=;
for(int j=;j<n;j++){
if(s[j]==''&&haveout==)
;
else{
printf("%c",s[j]);
haveout=;
}
}
if(haveout==){
printf("");
}
printf("\n"); }
05-11 13:58