NYOJ - A-B Problem

A-B Problem

时间限制:1000 ms  |           内存限制:65535 KB
难度:3
描述

A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。

现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢?

输入
有多组测试数据。每组数据包括两行,分别代表A和B。
它们的位数小于100,且每个数字前中可能包含+,- 号。
每个数字前面和后面都可能有多余的0。
每组测试数据后有一空行。
输出
对于每组数据,输出一行。
如果A-B=0,输出YES,否则输出NO。
样例输入
1
1

1.0
2.0
样例输出
YES
NO
#include <stdio.h>
#include <string.h>

char a[1000],b[1000];

int find_point(char s[])       // 判断是否为小数 
{
	for(int i = 0;i < strlen(s); i++)
	{
		if(s[i] == '.')
		return 1;
	}
	return 0;
}

void del_zero(char s[])     
{
	int len,i,count;
	if(find_point(s))       
	{   
	    len = strlen(s);
		for(i = len -1; i >= 0; i--)     // 除去小数后面的0 
		{
			if(s[i] == '0')
			s[i] = '\0';
			else
			break;
		}
		len = strlen(s) -1;
		if(s[len] == '.')
		s[len] = '\0';
	}
	if(s[0] == '+')            // 符号为正数情况 
	{
		len = strlen(s);
		count = 1;
		for(i = 1; i < len; i++)
		{
			if(s[i] == '0'&&s[i+1] != '\0')
			count++;
			else
			break;
		}
		for(i = 0; i < len - count; i++)
		{
			s[i] = s[i+count];
		}
		s[i] = '\0';
	}
	else if(s[0] == '-')     //符号为负数的情况 
	{
		len = strlen(s);
        count = 0;
		for(i = 1; i < len; i++)
		{
			if(s[i] == '0'&&s[i+1] != '\0')
			count++;
			else
			break;
		}
		for(i = 1; i < len -count; i++)
		{
			s[i] = s[i+count];
		}
		s[i] = '\0';
		if(s[0] == '-'&&s[1] == '0')
		{
			s[0] = '0';
			s[1] = '\0';
		}
	}
	else                       //没有符号的情况 
	{
		len = strlen(s);
		count = 0;
		for(i = 0; i < len; i++)
		{
			if(s[i] == '0'&&s[i+1] != '\0')
			count++;
			else
			break;
		}
		for(i = 0; i < len - count; i++)
		{
			s[i] = s[i+count];
		}
		s[i] = '\0';
	}
}
int main()
{   
	while(scanf("%s%s",&a,&b) != EOF)
	{
		del_zero(a);
		del_zero(b);
		printf("%s\n",strcmp(a,b)?"NO":"YES");
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值