PAT1060

题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1060

注意几点:(题目都没说清楚,坑)

1.有前导0的情况 例如:

3 00000012.3 0000001.1
NO 0.123*10^2 0.11*10^1

2.还有就是当位数不足N位时,不需要补全 , 如上的 0000001.1

3.0的不同表示:如:

5 0000000 0000000.000000
YES 0.00000*10^0

 

其实这题有些搞笑, 如下:

4   00000012.0 0000012.00
NO 0.120*10^2 0.1200*10^2

同样是0.12不相等。。。  纯字符串比较,题目要求不删除小数部分的后导0

 

我的思路:integer函数 算出整数部分有几位,process函数 处理字符串 使其变成0.xxx*10^的格式,最后联合比较就行。

 

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 
 5 int integer(string s)
 6 {
 7     if(s.find_first_not_of('0') == string::npos)
 8         return 0;
 9     else
10     {
11         int pos=s.find_first_not_of('0');
12         if(s[pos] == '.')
13         {
14             int i=pos+1;
15             while(i != s.length())
16             {
17                 if(s[i] == '0')
18                     ++i;
19                 else
20                     break;
21             }
22             if(i == s.length())
23                 return 0;
24             else
25                 return -(i-pos-1);
26         }
27         else
28         {
29             int i=pos;
30             while(i != s.length())
31             {
32                 if(s[i] != '.')
33                     ++i;
34                 else
35                     break;
36             }
37             return i-pos;
38         }
39     }
40 }
41 
42 string process(string s, int N)
43 {
44     int num=N;
45     string s1("0.");
46     int i=0;
47     for(; i<s.length(); ++i)
48         if(s[i] != '0' && s[i] != '.')
49         {
50             for(int j=i; j<s.length()&&j<i+N; ++j)
51             {
52                 if(s[j] == '.')
53                     ++N;
54                 else
55                     s1.push_back(s[j]);
56             }
57             break;
58         }
59     if(i == s.length())
60     {
61         string s2(num, '0');
62         s1 += s2;
63     }
64     return s1+"*10^";
65 }
66 
67 int main()
68 {
69     int N; string A, B;
70     while(cin>>N>>A>>B)
71     {
72         string a=process(A,N);
73         string b=process(B,N);
74         int ai=integer(A);
75         int bi=integer(B);
76         if(a == b && ai == bi)
77             cout<<"YES "<<a<<ai<<endl;
78         else
79             cout<<"NO "<<a<<ai<<" "<<b<<bi<<endl;
80     }
81     return 0;
82 }

 

posted @ 2013-10-24 11:09  coding_monkey  阅读(394)  评论(1编辑  收藏  举报