/*************************
题意:
把2个浮点数转化为规格化浮点数,并保留N位小数
判断转化后是否相等
************************/
/************************
思路大家各有不同,这里提一下需要注意的地方
1.N可能很大,结果需要补0,即可能有0.2000000输出
2.注意前置0的输入,即可能输入0000122.213
3.注意0的输入,即000.0000
这时候阶数应该是0!即0.000*10^0
*************************/
/***********************
笔记:
*********************/
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<stack>
#include<map>
#include<unordered_map>
using namespace std;
#define M 110000
#define INF 0x7fffffff
int findBegin(string s){
int i;
for(i=0;i<s.size();i++){
if(s[i]!='0')
break;
}
return i;
}
int main(){
int n,i;
string s1,s2;
cin>>n>>s1>>s2;
int flag=0;
//去除整数开头的0
s1=s1.substr(findBegin(s1));
s2=s2.substr(findBegin(s2));
//小数点位置决定了阶数r的大小
//得到小数点位置后去除小数点
//接着再规格化,化为0.x形式,而不是0.000x这种
int r1 = s1.find('.');
if(r1 == -1)
r1 = s1.size();
else{
s1 = s1.substr(0,r1) + s1.substr(r1+1);
r1 -= findBegin(s1);
s1 = s1.substr(findBegin(s1));
if(s1.size()==0) //说明为0
r1=0;
}
int r2 = s2.find('.');
if(r2 == -1)
r2 = s2.size();
else{
s2 = s2.substr(0,r2) + s2.substr(r2+1);
r2 -= findBegin(s2);
s2 = s2.substr(findBegin(s2));
if(s2.size()==0)
r2=0;
}
//求底数,注意不足则补0
string d1,d2;
for(i = 0; i < n; i++){
if(i < s1.size())
d1 += s1[i];
else d1 += '0';
if(i < s2.size())
d2 += s2[i];
else d2 += '0';
}
if(r1==r2 && d1==d2){
cout<<"YES";
cout<<" 0."<<d1<<"*10^"<<r1<<endl;
}
else{
cout<<"NO";
cout<<" 0."<<d1<<"*10^"<<r1<<" ";
cout<<"0."<<d2<<"*10^"<<r2<<endl;
}
return 0;
}
PAT 1060. Are They Equal (25) 浮点数转化 字符串处理
最新推荐文章于 2022-08-17 22:31:19 发布