您的位置:首页 > 其它

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

2018-03-04 20:33 363 查看
这题还好吧……没有特别坑的测试点

就是要注意用科学计数法的话可能开不了那么大,这里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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: