1060 Are They Equal (25分)

    科技2022-09-06  110

    题目链接 思路: 注意点: 易错数据:

    #pragma warning(disable:4996); #include<stdio.h> #include<math.h> #include<string.h> #include<iostream> #include<algorithm> #include<time.h> #include<stdlib.h> #include<vector> #include<set> #include<string> using namespace std; int n;//有效位数 string deal(string s, int& e) { int k = 0; //s的下标 while (s.length() > 0 && s[0] == '0') { s.erase(s.begin());//去除s的前导0 } if (s[0] == '.') { //去除前导0后是小数点,说明s是小于1得小数 s.erase(s.begin());//去掉小数点 while (s.length() > 0 && s[0] == '0') { s.erase(s.begin());//去除小数点后非0位前的所有零,据此来得到指数 e--;//每去掉一个0,指数e-1; } } else { //去掉前导0后不是小数点,说明有整数部分,则找到后面的小数点删除 while (k < s.length() && s[k] != '.') { //寻找小数点 k++; e++; //只要不碰到小数点就让指数e++ } if (k < s.length()) { //while结束后k<s.length(),说明碰到了小数点 s.erase(s.begin() + k);//删除小数点 } } if (s.length() == 0) { e = 0; }//如果去除前导零后s的长度变为0,说明这个数是0 } int num = 0; k = 0; string res; while (num < n) { //只要精度还没有到n if (k < s.length()) res += s[k++];//只要还有数字,就加到res末尾 else res += '0';//否则末尾添加0 构建科学计数法后的数字 num++;//精度加1 } return res; } int main() { string s1, s2, s3, s4; cin >> n >> s1 >> s2; int e1 = 0, e2 = 0;//分别为s1和s2的指数 s3 = deal(s1, e1); s4 = deal(s2, e2); if (s3 == s4 && e1 == e2) { //主体相同且指数相同则yes cout << "YES 0." << s3 << "*10^" << e1 << endl; } else { cout << "NO 0." << s3 << "*10^" << e1 <<" 0."<<s4<<"*10^"<<e2<< endl; } return 0; }
    Processed: 0.010, SQL: 10