PAT A 1060 Are They Equal (25分)

一、思路

STEP1:使用字符串存储给定的数

无法使用整型求解,会因为输入数超出整型范围无法表示,出现测试点5错误;

STEP2:规范化表示,即确定指数位和有效位

1、找到数字中小数点的下标,并删除小数点;
2、找到第一个有效位的小标(若下标指向数字尾部,说明数字为0)
3、此时发现,指数位即:小数点下标 - 删除小数点后第一个有效位下标
此时注意:若数字为0,则指数位应为0,否则会出现测试点6错误,如0.000会得到错误结果:0.000*10^3;

4、使用string库中的substr()函数,截取N位有效位,若不足N位则补0;
注:substr(下标, 长度),返回从下表开始给定长度的子串。

        ans[i] = num[i].substr( first, N );
        while( ans[i].size() < N )
            ans[i] += "0";

二、代码

#include <iostream>
#include <string>
using namespace std;
int main()
{
	int N, k[2];
	cin >> N;
	string ans[2], str;
	for( int i = 0, first, point; i < 2; ++i )
	{
		cin >> str;
		point = str.find(".");
		if( point == -1 )
			point = str.size();
		else str.erase(point, 1);
		for( first = 0; str[0] == '0'; ++first )
			str.erase(0, 1);
		if( !str.size() )
			k[i] = 0;
		else k[i] = point - first;
		ans[i] = str.substr(0, N);
		while( ans[i].size() < N )
			ans[i] += '0';
	}
	if( ans[0] == ans[1] && k[0] == k[1] )
		cout << "YES 0." + ans[0] + "*10^" << k[0] << endl;
	else cout << "NO 0." + ans[0] + "*10^" << k[0] << " 0." + ans[1] + "*10^" << k[1] << endl;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值