【PAT-A】1060. Are They Equal (25)

这题还好吧……没有特别坑的测试点
就是要注意用科学计数法的话可能开不了那么大,这里N可能到100.

测试点3对应小数点后面的处理 比如 2 0.0001 0.0000001
测试点4 一开始有0 比如输入数字 01.1 这种
测试点6对应0 0.0之类的情况 注意输出是 0.00…*10^0

然后我一开始是把判断是否相等的函数和输出的函数分了开来,至少多了一倍的代码量,感觉是傻的……

Code

// @author Birdy 2018.3.4
/*
PAT 1060
Test Point 3  2 0.00001 0.00000001
Test Point 6  0.0000 
*/
#include<iostream>
#include<string>
using namespace std;

string remove0(string M)
{
    // remove 0 with no meanings
    int i = 0;
    string t;
    bool flag = true;
    while (i < M.length())
    {
        if (M.at(i) != '0')
        {
            t = M.substr(i);
            break;

        }
        i++;
    }
    int len = t.length();
    for (int j = t.length() - 1; j >= 0; j--)
    {
        char num = t.at(j); 
        if (num == '0'&&flag)
        {
            len--;
        }
        else if (num != '0')
        {
            flag = false;
        }

        if (t.at(j) == '.')
        {
            return t.substr(0, len);
        }
    }
    return t;
}



void print_char(char m, int& num, int N, string &result)
{
    if (num < N)
    {
        num++;
        result += m;
    }
}

string printnumber(string M, int N)
{
    //space in the front
    M = remove0(M);
    string result(" 0.");
    int x = 0, i = 0, num_print = 0;
    bool flag = false;
    bool beforepoint = true;
    while (num_print < N || i < M.length())
    {
        if (M.length() <= i)
        {
            print_char('0', num_print, N, result);
        }
        else
        {
            char number = M.at(i);
            if ('0' != number && '.' != number)
            { 
                flag = true;
            }

            if ('.' == number)
            {
                beforepoint = false;
            }
            else if (flag)
            {
                print_char(number, num_print, N, result);
                beforepoint ? x++ : 0;
            }
            else 
            {
                beforepoint ? 0 : x--;
            }
        }
        i++;
    }
    result += "*10^";
    result += to_string(x);
    return result;

}

int main()
{
    int N;
    string A, B;
    cin >> N >> A >> B;
    A = printnumber(A, N);
    B = printnumber(B, N);
    if (A == B)
    {
        cout << "YES"<<A;
    }
    else
    {
        cout << "NO"<<A<<B;
    }
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/birdy_/article/details/79439360