问题描述:给你两串数字,判断它们是否相等。相等输出“YES”,不相等输出“NO”
A和B是一串超级大的数,但它们有很多部分是无用的:00009.0,0000000.3000000000等,我们的问题就是解决“前导零””后导零“以及特殊情况:-0与0.
tip1:当你重复用到某一个功能时,你可能需要定义一个函数了。(第一遍写了4000K的我...还写错了凸(艹皿艹 ))
tip2:定义函数时,形参最好不要与实参同名,否则监视时会...
当前代码的问题是: 大于0小于1的数前面的0会被删除,如0.001会变成.001。但是不影响结果.
#include <stdio.h>
#include <string.h>
void foredelete(char C[], int len)
{
int i, k;
for(i=0;C[i]=='0'||C[i]=='-';)
{
if(C[i]=='-')
{
i++;
continue;
}
for(k=i;k<len-1;k++)
{
C[k]=C[k+1];
}
C[len-1]='\0';
len--;
}
}
void afterdelete(char C[], int len) //此处len是被上一个函数处理过的长度
{
int i, flag = 0;
for (i = 0; i < len; i++)
{
if (C[i] == '.') flag++;
}
if (flag == 1)
{
for (i = len - 1; C[i] == '0' || C[i] == '.'; i--)
{
if (C[i] == '.')
{
C[i] = '\0';
break;
}
C[i] = '\0';
}
}
}
void end(char C[], int len) //此处的len是被上两个函数处理过后的长度
{
if (len == 0)
C[0] = '0';
if (C[0] == '-' && len == 1)
C[0] = '0';
}
char A[100000], B[100000];
int a, b, x;
int main()
{
while (~scanf("%s %s", A, B))
{
a = strlen(A);
b = strlen(B);
foredelete(A, a);
foredelete(B, b);
a = strlen(A);
b = strlen(B);
afterdelete(A, a);
afterdelete(B, b);
a = strlen(A);
b = strlen(B);
end(A, a);
end(B, b);
x = strcmp(A, B);
if (x == 0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}