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 的数据,前导零, 后置无意义零,以及混合数据。