赞
踩
https://www.luogu.com.cn/problem/P1553
这题主要就是要学会使用字符串的一些操作,比如find(),还有用到algorithm库的reverse函数进行反转比较方便。稍微难一点的地方我觉得就在于有几个比较刁钻的测试点不好找,因为刷题少所以没有注意到,还得多谢袁老师,比如 0 , 0.0 , 0/1 , 0% 这几个点。
- #include<string>
- #include<iostream>
- #include<algorithm>
- using namespace std;
-
- void inter(string a);//整数反转
- void decimal(string a); //小数反转
- void fraction(string a);//分数反转
- void percent(string a);//百分数反转
-
- int main()
- {
- string num;
-
- cin >> num;
-
- if(num.length() == 1) {
- cout<<num;
- return 0;
- }
-
- if(num.find('.') != string::npos)
- {
- decimal(num);
- }
- else if(num.find('/') != string::npos)
- {
- fraction(num);
- }else if(num.find('%') != string::npos)
- {
- percent(num);
- }else{
- inter(num);
- }
-
- return 0;
- }
-
- void inter(string a)
- {
- long long i;
- reverse(a.begin(),a.end());
-
- for(i=0; a[i] == '0' && i<a.length(); i++);
- for(int j=i; j<a.length(); j++)
- cout<<a[j];
- }
-
- void decimal(string a)
- {
- int k,i,j;
- string s1,s2;
-
- k=a.find('.');
- reverse(a.begin(),a.begin()+k);
- reverse(a.begin()+k+1,a.end());
-
- //输出小数点前部分
- for(i=0; a[i] == '0' && i<a.length() ;i++);
- if(a[i] == '.') cout<<'0'; //处理小数点前面为0的情况
- for(j=i; j<k+1; j++)
- cout<<a[j];
- //输出小数点后部分
- for(i=a.length()-1; a[i] == '0' && i>k+1; i--);
- for(j=k+1; j<i+1; j++)
- cout<<a[j];
-
- }
-
- //跟小数的处理方法类似
- void fraction(string a)
- {
- long long k,i,j;
- string s1,s2;
-
- k=a.find('/');
- reverse(a.begin(),a.begin()+k);
- reverse(a.begin()+k+1,a.end());
-
-
- for(i=0; a[i] == '0' && i<a.length() ;i++);
- if(a[i] == '/') cout<<'0'; //处理0/1这种分子为0的情况
- for(j=i; j<k+1; j++)
- cout<<a[j];
-
- for(i=k+1; a[i] == '0' && i<a.length() ;i++);
- for(j=i; j<a.length(); j++)
- cout<<a[j];
- }
-
- void percent(string a)
- {
- long long i;
- reverse( a.begin(),a.end()-1 );
-
- for(i=0; a[i] == '0' && i<a.length(); i++);
- if(a[i] == '%') cout<<'0';
- for(int j=i; j<a.length(); j++)
- cout<<a[j];
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。