A == B ?
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 104450 Accepted Submission(s): 16623
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
给你两个数字判断是否相等 并未给出数字的位数限制 所以可用字符串来处理
应注意 在处理字符串时 要去掉前导零和后缀零 同时还要注意数字前面的“+”和“-”
代码略长 思路简单
AC代码:
#include <stdio.h>
#include <string.h>
void jinghua(char *a){
int n=strlen(a);
int index1,index2;
int flag=1,flag1;
for (int i=0;i<n&&flag;i++){//判断有无小数点
if (a[i]=='.'){
index1=i;
flag=0;
}
}
int i,j;
if (!flag){//数字带小数点
flag1=1;
if (a[0]=='-'||a[0]=='+'){//数字前有“+”或“-”号
for ( i=1;i<=index1&&flag1;i++){//去掉前导0
if (a[i]!='0'){
index2=i;
flag1=0;
}
}
if (a[index2]=='.')
index2=index2-1;
for ( i=1,j=index2;i<n-index2;i++,j++){
a[i]=a[j];
}
}
else{//数字前无“+”或“-”号
flag1=1;
for ( i=0;i<=index1&&flag1;i++){
if (a[i]!='0'){
index2=i;
flag1=0;
}
}
if (a[index2]=='.')
index2=index2-1;
for ( i=0,j=index2;i<n-index2;i++,j++){
a[i]=a[j];
}
}
flag1=1;
a[i]='\0';
for (j=i-1;a[j]!='.'&&flag1;j--){//去掉后缀 0
if (a[j]=='0'){
a[j]='\0';
flag1=1;
}
else
flag1=0;
}
if (flag1){
a[j]='\0';
}
}
else{// 数字不带小数点
flag1=1;
if (a[0]=='-'||a[0]=='+'){// 数字前有“+”或“-”号
for ( i=1;i<n&&flag1;i++){//去掉前导0
if (a[i]!='0'){
flag1=0;
index2=i;
}
}
if (index2!=1){
for ( i=1,j=index2;i<n-index2;i++,j++){
a[i]=a[j];
}
}
if (index2!=1)
a[i]='\0';
}
else{//数字前无“+”或“-”号
flag1=1;
for ( i=0;i<n&&flag1;i++){//去掉前导0
if (a[i]!='0'){
flag1=0;
index2=i;
}
}
if (index2!=0){
for ( i=0,j=index2;i<n-index2;i++,j++){
a[i]=a[j];
}
}
if (index2!=0)
a[i]='\0';
}
}
}
int main (){
char a[100000],b[100000];
while (~scanf ("%s %s",a,b)){
jinghua(a);
jinghua(b);
if (strcmp(a,"-0")==0&&strcmp(b,"+0")==0||strcmp(a,"+0")==0&&strcmp(b,"-0")==0)
printf ("YES\n");
else if (strcmp(a,b)==0)
printf ("YES\n");
else
printf ("NO\n");
}
return 0;
}