杭电ACM 2054:A == B ?
来源:互联网 发布:淘宝儿童女装14岁 编辑:程序博客网 时间:2024/05/01 10:20
原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45556755
尼玛,这道题刚看的时候觉得太简单了,一会写了几行判断相等的代码,而且直接用a==b判断,提交时候就傻逼了,怎么也AC不了。原来这一道题确实是有点难度的,主要是在输入的数字中不一定是规则的数字,所以要考虑的情况有好几种。主要是考虑小数中末尾的0,如5.0和5.00是相等的数,所以输入的数据类型最好定义成字符串,然后在比较两个数前先把末尾的0去掉。另外,题目上没给具体的数值类型,所以要开一个很大的字符数组。
1)前面的无效0去掉
2)小数点后面的无效0去掉
3)-0=0
4)可以去掉的话,最好去掉小数点
我的代码如下:
#include <iostream>#include<string.h>using namespace std;//对数字进行统一处理,返回数字第一位不为0的位置int change_char(char *letter,int *len){ int i=0; int len_var=(*len)-1; //如果是符号,则跳过 if(letter[i]=='-') { ++i; --(*len); } //去掉前面的0 while(letter[i]=='0'&&i<=len_var) { --(*len); ++i; } //去掉小数点之后最后无效的0,从最后一位算起 for(int j=0; j<=len_var; j++) { if(letter[j]=='.') { while(letter[len_var]=='0'&&len_var>=0) { --(*len); --len_var; } break; } } //如果小数点后面都是无效的0.则去掉小数点 if(letter[len_var]=='.') --(*len); return i;}int main(){ char a[100000],b[100000]; int symbol_flag,lenght_a,lenght_b,pos_char_a,pos_char_b,out_flag=1; while(cin>>a>>b) { /*当两者符号不一样的时候做一个标志, 因为存在-0=0这种情况,所以当符号不一样不能直接下定论两者不相等 */ if(a[0]=='-'&&b[0]!='-' || a[0]!='-'&&b[0]=='-') symbol_flag=1; //求出a,b长度 lenght_a=strlen(a); lenght_b=strlen(b); //求出第一位不为0的数的位置 pos_char_a= change_char(a,&lenght_a); pos_char_b= change_char(b,&lenght_b); //当两者的有效位数不一样直接是不相等,注意下面几个continue的作用 if(lenght_a!=lenght_b) { cout<<"NO"<<endl; continue; } //以下几个语句都是在lenght_a=lenght_b才执行的 if(symbol_flag==1&&lenght_a==0) { cout<<"YES"<<endl; continue; } //当符号不一样,且lenght_a或者lenght_b都不为0时候是不相等的 if(symbol_flag==1) { cout<<"NO"<<endl; continue; } //当符号一样,长度相等执行下面语句,从有效长度起始位置开始判断各位是否相等 for(int i=pos_char_a,j=pos_char_b; i<lenght_a; i++,j++) { if(a[i]!=b[j]) { cout<<"NO"<<endl; out_flag=0; break; } } if(out_flag==1) cout<<"YES"<<endl; //从新初始化 out_flag=1; } return 0;}
0 0
- 杭电ACM 2054 A == B ?
- 杭电ACM 2054:A == B ?
- 杭电2054 A == B ?
- 杭电 2054 A==B?
- 杭电2054A == B ?
- 杭电2054 A==B?
- 【杭电】[2054]A==B
- 杭电2054-A == B ?
- 杭电2054A == B ?
- 杭电ACM 1228 A + B
- 杭电ACM 2034 人见人爱A-B
- 杭电ACM 2035 人见人爱A^B
- 杭电ACM 2057 A + B Again
- 杭电ACM--1228 A+B
- 杭电ACM 1000 A + B Problem
- 杭电ACM 1229 还是A+B
- 杭电ACM 2033 人见人爱A+B
- 杭电ACM 2034 人见人爱A-B
- JavaScript MVC 模式
- 使用GIMP从连排png文件中抽取单一图片的方法
- 管理感悟26条——项目管理/研发管理
- IEEE和SCI等的通俗简介
- /dev/fb0入门练习(linux FrameBuffer)
- 杭电ACM 2054:A == B ?
- 13-Integer to Roman-字符串相关-HashMap
- 安卓APP动态调试-IDA实用攻略
- 获取系统时间
- LODOP实现打印
- Objective-c NSFileManager
- mariadb init
- 欢迎您在新浪博客安家
- WebService与WebApplication的区别