A == B ?
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 64243 Accepted Submission(s): 10061
Problem Description
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO".
Input
each test case contains two numbers A and B.
Output
for each case, if A is equal to B, you should print "YES", or print "NO".
Sample Input
1 2
2 2
3 3
4 3
Sample Output
NO
YES
YES
NO
题目大意:给你两个数A和B,推断A和B是否相等,若相等输出"YES"。
否则输出"NO"。
思路:题目没有给出A、B的数据规模,这里就是个大数题。把A、B用
字符数组存起来。标记A、B的正负号,若为正,则标记为1,若为负。
则标记为0。将字符数组内的'-'赋值为'0',然后将整数前的零和小数部分
后边的零清除,然后用数组将整数部分和小数部分分别存起来。之后分别
比較A、B的整数部分和小数部分是否相等。注意A、B可能为整数或是小
数,尤其注意A、B可能会在整数部分前边有N个零或者小数部分后边有N
个零,比方00012、123.123000、0.00、012.200等等。详细解题过程
看以下代码。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char A[20020],B[20020];
char a[20020],aa[20020],b[20020],bb[20020];
int main()
{
int flagA,flagB,lenA,lenB,markA,markB;
while(~scanf("%s%s",A,B))
{
memset(a,0,sizeof(a));//存A的整数部分
memset(b,0,sizeof(b));//存B的整数部分
memset(aa,0,sizeof(aa));//存A的小数部分
memset(bb,0,sizeof(bb));//存B的小数部分
flagA = flagB = 1;//标记正负数,1为整数,0为负数
markA = markB = 0;//标记小数点,1为有小数点,0为没有小数点
if(A[0] == '-')//标记并清除A、B的正负号
{
flagA = 0;
A[0] = '0';
}
if(B[0] == '-')
{
flagB = 0;
B[0] = '0';
}
lenA = strlen(A);
lenB = strlen(B);
int numa = 0,i;
for(i = 0; i < lenA; i++)//清除A的整数部分前面的零
if(A[i]!='0')
break;
if(i==lenA || A[i]=='.')//若整数部分全为0,则数组a为"0"
a[0] = '0';
for(; i < lenA; i++)//用数组a记录A的整数部分
{
if(A[i]!='.')
a[numa++] = A[i];
else
{
markA = 1;
break;
}
}
int j,numaa = 0;
for(j = lenA-1;j > i; j--)//清除A小数部分后边的零
if(A[j]!='0')
break;
if(j == i)//若小数部分全为0,则数组aa为"0"
aa[0] = '0';
for(;j > i; j--)//用数组aa记录A的小数部分
{
aa[numaa++] = A[j];
}
//B和A的处理一样
int k,l;
for(k = 0; k < lenB; k++)
if(B[k]!='0')
break;
if(k == lenB || B[k]=='.')
b[0] ='0';
int numb = 0;
for(; k < lenB; k++)
{
if(B[k]!='.')
b[numb++] = B[k];
else
{
markB = 1;
break;
}
}
int numbb = 0;
for(l = lenB-1;l > k; l--)
if(B[l]!='0')
break;
if(l==k)
bb[0]='0';
for(;l > k; l--)
{
bb[numbb++] = B[l];
}
if(markA == 0)
aa[0] = '0';
if(markB == 0)
bb[0] = '0';
if(flagA==flagB && strcmp(a,b)==0 && strcmp(aa,bb)==0)//推断A、B是否相等
printf("YES\n");
else
printf("NO\n");
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。