1060. Are They Equal (25)

来源:互联网 发布:飞毛腿跑腿软件好吗 编辑:程序博客网 时间:2024/05/20 11:32

1. 原题: https://www.patest.cn/contests/pat-a-practise/1060

2. 思路:

题意:
转换成类似科学记数法的形式,并比较是否相等。
思路:
字符串处理题。坑比较多。
若相等,则指数和尾数都要相等。
核心是如何获得指数和尾数。
要点:
1. 给出的数可能是0,或00这种(最后一个测试点)。
2. 可能有前导0, 如00123
3. 可能为小数, 如0.123或0.00123.
处理字符串我用的stl中的string,也可以用char。
已AC。
部分测试点参考自: http://blog.csdn.net/xyt8023y/article/details/47086811
感谢博主。

3. 源码(已AC):

#include<iostream>#include<string>using namespace std;int N;//精度string sa, sb;int getExp(string &s, string &re);//返回指数,第二个参数是处理后得到的尾数int main(void){//freopen("in.txt", "r", stdin);cin >> N >> sa >> sb;string re1, re2;//存储尾数int epa = getExp(sa, re1);//存储指数int epb = getExp(sb, re2);if (epa == epb && re1 == re2)//输出cout << "YES 0." << re1 << "*10^" << epa << endl;else{cout << "NO 0." << re1 << "*10^" << epa<< " 0." << re2 << "*10^" << epb << endl;}return 0;}int getExp(string &s, string &re)//返回指数,第二个参数是处理后得到的尾数{int point_pos = -1, first_pos = -1;//分别是小数点位置, 第一个非0位置for (int i = 0; i < s.size(); i++){if (s[i] == '0' && first_pos == -1)//前导0跳过continue;else if (s[i] == '.')point_pos = i;else{if (first_pos == -1)first_pos = i;if (re.size() < N)//尾数存入字符串re.push_back(s[i]);}}int i = re.size();while (i < N)//不够,后面添0{re.push_back('0');i++;}if (first_pos == -1)//表示全为0,返回指数0.return 0;if (point_pos == -1)//无小数点point_pos = s.size();if (point_pos > first_pos)return (point_pos - first_pos);elsereturn (point_pos + 1 - first_pos);//为小数,小数点占一位,需特殊处理。}


0 0
原创粉丝点击