PAT甲级真题1060 PAT甲级真题1060(超详细!)

如果机器只能保存 33 个有效数字,则将浮点数 1230012300 和 12358.912358.9 视为相等(多余位数直接舍弃,不进行四舍五入),因为它们都保存为 0.123×1050.123×105。

现在给定一个机器能够保存的有效数字位数,以及两个浮点数,请你判断两个数在该机器上是否相等。

注意:

数字不一定标准,可能有前导 00。
如果数值是0,则指数规定为0。
输入格式
共一行,包含三个数 N,A,BN,A,B,分别表示有效位数,以及两个用来比较的浮点数。

输出格式
共一行,如果两个数相等,则先输出 YES,然后输出它们共同的保存方法,格式为 0.d[1]…d[N]*10^k(d[1] > 0,除非数字为 00)。

如果两个数不相等,则先输出 NO,然后分别输出两个数的保存方法,格式同上。

数据范围
1≤N<1001≤N<100,
AA 和 BB 都不大于 1010010100,且总位数不超过 100100。

输入样例13 12300 12358.9
输出样例1:
YES 0.123*10^5
输入样例23 120 128
输出样例2:
NO 0.120*10^3 0.128*10^3
这里给出2个测试用例

输入 
2 0.000001 0.1
标准答案
NO 0.10*10^-5 0.10*10^0


输入 
6 12300 12358.9
输出
NO 0.123000*10^5 0.123589*10^5
#include<bits/stdc++.h>
using namespace std;
int n;//有效位数 
string tostring(int k){  //int转化成string
	string t;
	stringstream input;
	input<<k;
	input>>t;
	return t;
}
string change(string s){
	int k=s.find('.');//K的数值就是10的几次方 
	if (k == -1) s += '.', k = s.find(".");//没有小数点后面加一个 
    s=s.substr(0,k)+s.substr(k+1);//去除小数点 
	while (s.size() && s[0] == '0') s = s.substr(1), k -- ;//取出前导零 
	if (s.empty()) k = 0;//如若为零,K为0
	if(s.size()>n)s = s.substr(0, n);
	else s=s+string(n-s.size(),'0');//补零
	return "0." + s + "*10^" + tostring(k); 
}
int main()
{
 cin>>n;
 string a,b;
 cin>>a>>b;
 a=change(a);
 b=change(b);
 if(a==b)
 	cout<<"YES"<<' '<<a<<endl;
 else
 cout<<"NO"<<' '<<a<<' '<<b<<endl;
  return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王子y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值