15分求助(哭。。。)

P1553 数字反转(升级版)

1.对于一个字符串进行操作,首先输入这个字符串,判断里面是否是.运算符或者是/运算符,因为这两种运算符操作起来要读取两个数值 2.设置一个翻转数组的change函数,去除前导0 3.然后对字符串进行操作,如果这个字符串是一个整数或者是%运算符,那么从字符串a中读取一个整数,然后放到change函数里改变,再将这个数直接输出即可 4.如果是小数或者分数,那么从字符串中读取两个整数和一个字符,把两个整数放到change函数里翻转,再将这两个整数和这个字符打印到数组b中,输出数组b即可,注意,字符数组b清零 **解法1:** ```c #include<bits/stdc++.h> using namespace std; string s; char k=0; int cnt=0; int x; int m; int main() { cin>>s; for(int i=0;i<s.size();i++) { if(s[i]>='0'&&s[i]<='9') cnt++; else { k=s[i]; break; } } x=cnt; cnt--; while(s[cnt]=='0'&&cnt>0) cnt--; for(int i=cnt;i>=0;i--) cout<<s[i]; if(k==0) return 0; else if(k=='%') {cout<<k;return 0;} else cout<<k; m=s.size()-1; while(s[x+1]=='0'&&x<m-1) x++; while(s[m]=='0' && m>x+1) m--; for(int i=m;i>x;i--) cout<<s[i]; return 0; } ``` **解法2** ```c #include<bits/stdc++.h> using namespace std; long long change (long long x) { long long sum=0; while(x!=0) { sum=sum*10+x%10; x=x/10; } return sum; } int main() { char a[30],b[30]; char ans; bool flag=0; cin>>a; for(int i=0;i<=strlen(a)-1;i++)//依次遍历字符串 { if(a[i]=='.'||a[i]=='/')//如果出现了这两种字符 { ans=a[i]; flag=1;//flag标记为1,退出循环 break; } } if(flag==0)//如果是整数或者是% { long long num; if(a[strlen(a)-1]=='%')//如果是% { sscanf(a,"%ld%",&num);//读取一个整数 cout<<change(num)<<"%";//翻转后输出这个数再输出% } else//如果是整数 { sscanf(a,"%ld",&num);//读取一个整数 cout<<change(num);//翻转后直接输出 } } else//如果是有操作符的话 { long long num1,num2; sscanf(a,"%ld%c%ld",&num1,&ans,&num2);//从字符串a中读取三个值 memset(b,0,sizeof(b));//清空b数组 sprintf(b,"%ld%c%ld",change(num1),ans,change(num2));//将三个值打印到数组b中 cout<<b<<endl;//输出字符数组b } return 0; } ``` **希望能关注我!!!**
by timmyliao @ 2024-01-25 15:06:28


|