水题 题解——神奇的数字基因

C: 神奇的数字基因

题目描述

众所周知,人类的外观与外貌具有极大的差异性,但实际决定其各种因素的根本因素在于基因,而实际上,同种生物的全部基因库相似性其实相当的高。而数字长相上差异性也是很大的,但数字的大小取决于它的基因,也就是说相同大小的数字基因是相等的。羊村的新村长帆洋洋对数字很感兴趣,尤其是对于数字之间基因的关系,他给希望你能够写一个程序帮助他判断数字 A 与 B 的基因关系,如果你能帮助村长帆洋洋成功找出数字间的基因关系,羊村将会俸你为贵客,还有希望能见到羊村的村花美羊羊哦! 你可以帮助帆洋洋嘛?只需要写出一个能够判断A和B是否相等的程序哦

Data range: (1e -10000 <= A ,B <= 1e10000)


输入

测试可能包含多个样本。

每个测试用例包含两个数字A和B。


输出

对于每一种情况,如果A等于B,你应该打印“YES”,否则打印“NO”。

样例输入

1 2
3 3
4 3
21 21
1.00 1.0

样例输出

NO
YES
NO
YES
YES

提示

1.00 和 1.0相等哦

基本思路

题意是给出两个数 A 和 B ,判断它们是否相等,题目给出数据范围在10的一万次方到10的负一万次方区间,用double之类的变量无法存下,所以只能用字符串去储存,然后再进行对比,与上次的大数相加类似。
首先定义两个字符数组,将A与B分别读取进入两个不同的字符串数组,然后进行处理
定义一个函数,将小数点后无意义的零进行处理
定义两个指针,对无意义的前导零进行处理
对于处理后的字符串进行比较,输出

即:
			1. 去掉小数点后的无意义的零
			2. 若小数点零被消除,则去掉小数点,防止 10 !=10.0 的情况
			3. 去掉无意义的前导题

AC代码如下:

#include <stdio.h>
#include <string.h>

void cut(char * a) {
  int la = strlen(a)  - 1;
  for (int i = la; i > 0; i-- ) {
    if (a[i] == '0') la--;
    else break;
  }
  if (a[la] == '.') la--;
  a[la + 1] = '\0';
}

int main() {
  char a[50000], b[50000];

  while (scanf("%s%s", a, b) != EOF) {
    int la = strlen(a);
    int lb = strlen(b);
    for (int i = 0 ; i < la; i++ ) {
      if (a[i] == '.') {cut(a);break;}
    }

    for (int i = 0 ; i < lb; i++ ) {
      if (b[i] == '.') {cut(b);break;}
  }
  
    char * p1 = a, * p2 = b;
    int t = 0;
    while (a[t] == '0') t++;
    p1 = p1 + t;t = 0;
    while (b[t] == '0') t++;
    p2 = p2 + t;

    if (strcmp(p1, p2)) printf("NO\n");
    else printf("YES\n");
  }

return 0;
}


测试数据中包含1e10000 的数据和1e -10000 的数据,前导零, 后置无意义零,以及混合数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值