PAT甲级 1060 Are They Equal 判断两个小数是否相等

发布时间:2026/7/28 16:41:07
PAT甲级 1060 Are They Equal 判断两个小数是否相等 Solution题目要求给出两个非负的小数且都不超过10的100次方。再给出一个有效位数将这两个小数都转化为科学计数法的形式即0.d[1]…d[N]*10^k (d[1]0 除非这个数是0)若转化后的两数相等则输出“YES”否则输出“NO”。给出的数可能包含前缀0或者后缀0要注意去掉。代码如下//模拟#includeiostream#includestringusing namespace std;intn;//有效位数string s1,s2;pairstring,intp;pairstring,intdeal_string(string a){//处理输入的字符串if(a0){string d0.;for(inti0;in;i){d0;}intk0;p.firstd;p.secondk;returnp;}intleft,right;//去除多余0后子串的起始位置intflag10,flag20;for(inti0;ia.length();i)//去除前缀的0和后缀的0{if(!flag1(a[i]!0||(a[i]0a[i1].))){lefti,flag11;}if(flag21a[i]!0){righti;}if(flag20){righti;}if(a[i].){flag21;}}string ca.substr(left,right-left1);intpos1;for(pos10;c[pos1];pos1){//找到小数点的位置if(c[pos1].){break;}}intpos2;for(pos20;c[pos2];pos2){//找到第一个不是0的数字位置即科学技术法中小数点应该放在哪个位置之前if(c[pos2]!0c[pos2]!.){break;}}string d0.;intnum0;for(intipos2;c[i];i){if(c[i].){continue;}dc[i];num;if(numn){break;}}for(inti0;in-num;i){//补0d0;}intkpos1-pos2;//小数点位置的变化就是指数if(k0)k;p.firstd;p.secondk;returnp;}intmain(){cinns1s2;pairstring,intmm1,mm2;mm1deal_string(s1);mm2deal_string(s2);if(mm1mm2){if(mm1.first0mm1.second0){coutYES mm1.first;}else{coutYES mm1.first*10^mm1.second;}}else{if(mm1.first0mm1.second0){coutNO mm1.first ;}else{coutNO mm1.first*10^mm1.second ;}if(mm2.first0mm2.second0){coutmm2.first;}else{coutmm2.first*10^mm2.second;}}return0;}

相关新闻

最新新闻

日新闻

周新闻

月新闻