A-B Problem 大数相等
发布时间:2020-12-26 10:03:36 所属栏目:大数据 来源:网络整理
导读:A-B Problem http://acm.nyist.net/JudgeOnline/problem.php?pid=524 时间限制:1000?ms ?|? 内存限制:65535?KB 难度:3 输入 有多组测试数据。每组数据包括两行,分别代表A和B。 它们的位数小于100,且每个数字前中可能包含+,- 号。 每个数字前面和后面都
A-B Problemhttp://acm.nyist.net/JudgeOnline/problem.php?pid=524 时间限制:1000?ms ?|? 内存限制:65535?KB 难度:3 输入 有多组测试数据。每组数据包括两行,分别代表A和B。 输出 对于每组数据,输出一行。 样例输入 1 1 1.0 2.0 样例输出 YES NO 描述 A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。 现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢? ? 我的代码 #include <stdio.h> #include <string.h> #define MAX 120 //处理化简字符串 变为 符号位 + 数字 + 小数点 + 小数位 如 +001. --> +1 001.00 --> +1 void deal(char *s){ int dot,len,i,t,k; //特殊情况 .000 00.00 +0.00 -0.00 //补充符号位 if(s[0]!='+' && s[0]!='-'){ len = strlen(s); for(i=len+1;i>0;i--) s[i]=s[i-1]; s[0]='+'; } //处理整数位 .1 --> +0.1 //只有小数点时补 0 if(s[1]=='.'){ len = strlen(s); for(i=len+1;i>1;i--) s[i]=s[i-1]; s[1]='0'; } //将整数位前面的无效 0 去除 for(k=1;s[k] && s[k]=='0' && s[k+1]!='.' && s[k+1] ;k++); t = k-1; //左移的位数 for(i=k;s[i];i++) s[i-t]=s[i]; s[i-t]=' '; //处理小数 len = strlen(s); //小数点的位置 for(dot=0;s[dot] && s[dot]!='.';dot++); for(i=len-1;i>dot && s[i]=='0';i--); s[i+1]=' '; if(s[i]=='.') s[i]=' '; //特殊情况 +0 -0 len=strlen(s); if(len==2 && s[1]=='0'){ s[0]='0'; s[1]=' '; } } char a[MAX],b[MAX]; int main(int argc,char *argv[]) { int state,lena,lenb; while( scanf("%s %s",a,b)!=EOF ){ deal(a); deal(b); // printf("%s %sn",b); if(!strcmp(a,b)) printf("YESn"); else printf("NOn"); } return 0; } ? 题目推荐 #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> const int M=100; void back(char* c,int &l) { if(strchr(c,'.') == NULL) return ; for(int i=l-1;i>=1;i--) { if(c[i]!='0') break; l--; } if(c[l-1]=='.') l--; c[l]=' '; //puts("after back->"); //puts(c); } void front(char* c,int &l,bool &f) { int cnt = isdigit(c[0]) ? 0 : 1; if(c[0]=='-') f = false; for(int i=cnt;i<l-1;i++) { if(c[i+1]=='.' || c[i]!='0') break; cnt++; } if(cnt) { for(int i=0;i<l-cnt;i++) c[i] = c[i+cnt]; c[l-cnt] = ' '; } //puts("after front->"); //printf(f?"+ ":"- "); //puts(c); } void deal(char *c,bool &f) { int l = strlen(c); f = true; back(c,l); front(c,l,f); } bool Cmp(char* A,char* B,bool a,bool b) { if(strcmp(A,B) == 0) { if(strcmp(A,"0") == 0 || a^b == 0) return true; } return false; } int main() { char A[M],B[M]; bool a,b; while(~scanf("%s%s",A,B)) { deal(A,a); deal(B,b); puts(Cmp(A,B,b)?"YES":"NO"); } return 0; } (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |