HDOJ2054A==B?笔记

题目地址
这道题是大数比较的题,第一次做的时候,傻乎乎的直接比较是不是相等,当然WA,然后第二次有了字符串的概念,用了字符串来做,想了很多种情况,如果输入的数不是同一进制的怎么办,发现如果这样想这道题没法做了,就当成了相同进制,通过字符串来比较。
因为要字符串判断,所以要判断有没有无谓的东西使得两个相等的数不一样,例如000.001000和0.001这两个数是相等的,可是字符串却会判断不相等。
两个相等的数加上什么还是相等的呢(对于字符串而言),就是加上前导0和后导0,懂了这个有个大概了

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>
using namespace std;
void Solve(string &n) {
	if(n.find('.') != string::npos) {
		int tem = n.size() - 1;
	    //cout << tem << endl;
		int len = n.size();
		//cout << len << endl;
		for(int i = tem; n[i] == '0'; i--) {
			len--;
		}
		if(n[len - 1] == '.') {
			len--;
		}
		n = n.substr(0, len);
		//cout << n << endl;
	}
	//处理前导0,看一些博客,测试数据并没有前导0,也没有符号数,就是说不会出现-0.0,+0.0这些奇葩的数
	if(n[0] == '0' && n[1] != '.') {
		int sub = 1;
		while(n[sub] == '0' && n[sub + 1] != '.') {
			sub++;
		}
		int len = n.size();
		n = n.substr(sub, len - sub);
	}
	
}
int main(void) {
	string n1, n2;
	while(cin >> n1 >> n2) {
		Solve(n1);
		Solve(n2);
		//cout << n1 << endl;
		if(n1 == n2) {
			printf("YES\n");
		}
		else {
			printf("NO\n");
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Greatljc

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值