测试一下:0.1
awa
by jjy2008 @ 2022-10-07 21:33:21
@[claran_ran_away](/user/305770)
by jjy2008 @ 2022-10-07 21:33:37
@[jjy2008](/user/615344)
谢谢提醒
但是还是一样qwq
新代码
```cpp
#include <bits/stdc++.h>
using namespace std;
char start[22];
string normal(char need[],bool u/*哪边去0*/){
char back[22],last[22];
for(int i = strlen(need) - 1,j = 0;i >= 0;i--,j++){//翻转
back[j] = need[i];
}
if(u == 0){//向前去0
bool r = false,u;
for(int i = 0,j = 0;i < 22;i++)
if(r == true){
last[j] = back[i];
j++;
continue;
}else if(back[i] != '0' && back[i] != 32){
last[j] = back[i];
j++; r = true;
}
}else if(u == 1){//向后去0
int flag2 = -1;
for(int i = 21;i >= 0;i--)
if(back[i] == '1' || back[i] == '2' || back[i] == '3' || back[i] == '4' || back[i] == '5' || back[i] == '6' || back[i] == '7' || back[i] == '8' || back[i] == '9'){
flag2 = i;
break;
}
if(flag2 == -1) return "0";
for(int i = 0;i <= flag2;i++) last[i] = back[i];
}
int l = strlen(last) - 1;
if(l == -1) return "0";//修改处~~!
char en[l];
for(int i = 0;i <= l;i++) en[i] = last[i];//保证无其他空字符返回
return en;
}
void point(){//小数
char front[22],behind[22];/*分成前后两段*/ int flag;
for(int i = 0;i < 22;i++)
if(start[i] == '.') flag = i;
for(int i = 0;i < flag;i++) front[i] = start[i];
for(int i = flag+1,j = 0;i < 22;i++,j++) behind[j] = start[i];
cout << normal(front,0) << "." << normal(behind,1);
}
void devide(){//分数
char front[22],behind[22];/*分成前后两段*/ int flag;
for(int i = 0;i < 22;i++)
if(start[i] == '/') flag = i;
for(int i = 0;i < flag;i++) front[i] = start[i];
for(int i = flag+1,j = 0;i < 22;i++,j++) behind[j] = start[i];
cout << normal(front,0) << "/" << normal(behind,0);
}
void ddevide(){//百分
for(int i = 0;i < 22;i++)
if(start[i] == '%') start[i] = 32;
cout << normal(start,0) << "%";
}
int main(){
scanf("%s",start);
for(int i = 0;i < 22;i++)
if(start[i] == '.'){
point();
return 0;
}else if(start[i] == '/'){
devide();
return 0;
}else if(start[i] == '%'){
ddevide();
return 0;
}
cout << normal(start,0);
return 0;
}
```
by claran_ran_away @ 2022-10-12 19:20:21
重新写了个不要函数只要int存答案的
```
#include <bits/stdc++.h>
using namespace std;
int main(){
char s[21]; short type = 0;
scanf("%s",s);
for(int i = 0;i < 21;i++)
if(s[i] == '.') type = 1;
else if(s[i] == '/') type = 2;
else if(s[i] == '%') type = 3;
if(type == 0){//0
int one[21],flag = 0,k;
memset(one,0,sizeof(one));
for(int i = 20,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
one[j] = s[i] - '0';
j++; k = j;
}
}//01
for(int i = 0;i < k;i++){
if((one[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << one[i];
}
}//01
bool y = 0;
for(int i = 0;i < 21;i++)
if(one[i] != 0) y = 1;
if(y == 0) cout << 0;
}else if(type == 1){
int b[11],f[11],flag = 0,k,w = 0;
memset(b,0,sizeof(b));
memset(f,0,sizeof(f));
for(int i = 0;i < 11;i++)
if(s[i] == '.') w = i;
for(int i = w,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
f[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 0;i < k;i++){
if((f[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << f[i];
}
}
bool y = 0;
for(int i = 0;i < 11;i++)
if(f[i] != 0) y = 1;
if(y == 0) cout << 0;
cout << ".";
flag = 0; k = 0;
for(int i = 10,j = 0;i > w;i--){
if(s[i] >= '0' && s[i] <= '9'){
b[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 10;i >= 0;i--)
if(b[i] >= 1 && b[i] <= 9){
flag = i;
break;
}
for(int i = 0;i <= flag;i++) cout << b[i];
}else if(type == 2){
int b[11],f[11],flag = 0,k,w = 0;
memset(b,0,sizeof(b));
memset(f,0,sizeof(f));
for(int i = 0;i < 11;i++)
if(s[i] == '/') w = i;
for(int i = w,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
f[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 0;i < k;i++){
if((f[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << f[i];
}
}
bool y = 0;
for(int i = 0;i < 11;i++)
if(f[i] != 0) y = 1;
if(y == 0) cout << 0;
cout << "/";
flag = 0; k = 0;
for(int i = 10,j = 0;i > w;i--){
if(s[i] >= '0' && s[i] <= '9'){
b[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 0;i < k;i++){
if((b[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << b[i];
}
}
y = 0;
for(int i = 0;i < 11;i++)
if(b[i] != 0) y = 1;
if(y == 0) cout << 0;
}else if(type == 3){
int one[21],flag = 0,k;
memset(one,0,sizeof(one));
for(int i = 20,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
one[j] = s[i] - '0';
j++; k = j;
}
}//01
for(int i = 0;i < k;i++){
if((one[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << one[i];
}
}
bool y = 0;
for(int i = 0;i < 21;i++)
if(one[i] != 0) y = 1;
if(y == 0) cout << 0;
cout << "%";
}
return 0;
}
```
by claran_ran_away @ 2022-10-12 21:15:00
原来是数组初始化的问题。。。
必须先把每个字符串都弄成32.。
AC~!!谢谢大佬!```
#include <bits/stdc++.h>
using namespace std;
int main(){
char s[50]; short type = 0;
for(int i = 0;i < 49;i++) s[i] = 32;
scanf("%s",s);
for(int i = 0;i < 50;i++)
if(s[i] == '.') type = 1;
else if(s[i] == '/') type = 2;
else if(s[i] == '%') type = 3;
if(type == 0){//0
int one[50],flag = 0,k;
memset(one,0,sizeof(one));
for(int i = 49,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
one[j] = s[i] - '0';
j++; k = j;
}
}//01
for(int i = 0;i < k;i++){
if((one[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << one[i];
}
}//01
bool y = 0;
for(int i = 0;i < 50;i++)
if(one[i] != 0) y = 1;
if(y == 0) cout << 0;
}else if(type == 1){
int b[50],f[50],flag = 0,k,w = 0;
memset(b,0,sizeof(b));
memset(f,0,sizeof(f));
for(int i = 0;i < 50;i++)
if(s[i] == '.') w = i;
for(int i = w,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
f[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 0;i < k;i++){
if((f[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << f[i];
}
}
bool y = 0;
for(int i = 0;i < 50;i++)
if(f[i] != 0) y = 1;
if(y == 0) cout << 0;
cout << ".";
flag = 0; k = 0;
for(int i = 49,j = 0;i > w;i--){
if(s[i] >= '0' && s[i] <= '9'){
b[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 49;i >= 0;i--)
if(b[i] >= 1 && b[i] <= 9){
flag = i;
break;
}
for(int i = 0;i <= flag;i++) cout << b[i];
}else if(type == 2){
int b[50],f[50],flag = 0,k,w = 0;
memset(b,0,sizeof(b));
memset(f,0,sizeof(f));
for(int i = 0;i < 50;i++)
if(s[i] == '/') w = i;
for(int i = w,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
f[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 0;i < k;i++){
if((f[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << f[i];
}
}
bool y = 0;
for(int i = 0;i < 50;i++)
if(f[i] != 0) y = 1;
if(y == 0) cout << 0;
cout << "/";
flag = 0; k = 0;
for(int i = 49,j = 0;i > w;i--){
if(s[i] >= '0' && s[i] <= '9'){
b[j] = s[i] - '0';
j++; k = j;
}
}
for(int i = 0;i < k;i++){
if((b[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << b[i];
}
}
y = 0;
for(int i = 0;i < 50;i++)
if(b[i] != 0) y = 1;
if(y == 0) cout << 0;
}else if(type == 3){
int one[50],flag = 0,k;
memset(one,0,sizeof(one));
for(int i = 49,j = 0;i >= 0;i--){
if(s[i] >= '0' && s[i] <= '9'){
one[j] = s[i] - '0';
j++; k = j;
}
}//01
for(int i = 0;i < k;i++){
if((one[i] != 0 && flag == 0) || flag == 1){
flag = 1;
cout << one[i];
}
}
bool y = 0;
for(int i = 0;i < 50;i++)
if(one[i] != 0) y = 1;
if(y == 0) cout << 0;
cout << "%";
}
return 0;
}
```
by claran_ran_away @ 2022-10-12 21:20:45