本地全对,提交10分,测试点试过全对,蒟蒻求助大佬们!

P1553 数字反转(升级版)

测试一下: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


|