杭电2054 A==B 【discuss区的代码写的太好看了】

//后来自己加上了判断是否开头有零,又犯了几个错误......字符外没加单引号,for循环第三个空内用的是&&
#include<stdio.h> 
#include<string.h>
#define maxn 100000//长的字符数组定义方式!就因为这里一直不能运行
char a[maxn], b[maxn];<pre name="code" class="objc">#include<stdio.h> 
#include<string.h>
#define maxn 100000
char a[maxn], b[maxn],a2[maxn],b2[maxn];
int main()
{
    int la, lb, max, i, j,marka, markb, count;
    memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b));
    while (scanf("%s%s", a, b) != EOF)
    {
		memset(a2, 0, sizeof(a2)); memset(b2, 0, sizeof(b2));
        la = strlen(a);lb = strlen(b);
        marka = markb = 0;

		//1.前导零去掉,数组前移并储存在新数组a2里
		for(i=0;i<la;i++){if(a[i]!='0')  {marka=i;break;}  }//0是字符...所以不可以直接用if(a[i]!=0)来判断好么!!
		for(i=0,j=marka;i<la-marka&&j<la;i++,j++){	a2[i]=a[j];}
		for(i=0;i<lb;i++){if(b[i]!='0')  {markb=i;break;}  }
		for(i=0,j=markb;i<lb-markb&&j<lb;i++,j++){ b2[i]=b[j];}	

        //2.没点的加点
		marka=0;markb=0;
		la=strlen(a2);lb=strlen(b2);
        for (i = 0; i < la; i++){ if (a2[i] == '.'){ marka = i; break; } }
        for (i = 0; i < lb; i++){ if (b2[i] == '.'){ markb = i; break; } }
        if (marka == 0)a2[la] = '.';
        if (markb == 0)b2[lb] = '.';
        la = strlen(a2);lb = strlen(b2);
		
        //2.用0补齐
        max = la > lb ? la : lb;
        for (i = la; i < max; i++) a2[i] = '0';
        for (i = lb; i < max; i++) b2[i] = '0';
		
        //3.逐个判断
        if (!(strcmp(a2,b2))) printf("YES\n");
        else printf("NO\n");
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
		memset(a, 0, sizeof(a2));
        memset(b, 0, sizeof(b2));
    }
	return 0;
}

 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值