PAT A1060 Are They Equal

#include <string>
#include <iostream>
using namespace std;
int N;
void getK(string  &num,int &n){
	while(num[0] == '0')  num.erase(num.begin());
	if(num.length() == 0){ //处理0
		num = "0";
		n = 0;
		return;
	}else if(num[0] == '.'){  //处理小于1的数
		num.erase(num.begin());
		n=0;
		while(num[0]=='0'){
			n--;
			num.erase(num.begin());
		}
		if(num.length() == 0){
			n=0;
			num = "0";
		}
		return;
	}else{    //处理大于1的数
		int local = num.find(".");
		if(local == string ::npos){  //如果这个数字没有小数部分
			n = num.length();
			return ;
		}else{   //处理混合型的数组
		  
			n = local;
			num.erase(num.begin()+local);
			return;
		}
	}
}
 
void getN(string &num){
	while(num.length()<N){
		num+="0";
	}
}
bool compare(string &num1,string &num2){
	getN(num1);
	getN(num2);
	num1= num1.substr(0,N);
	num2 = num2.substr(0,N);
	if( num1 == num2 ){
		cout<<"YES ";
		return true;
	}else{
		cout<<"NO ";
		return false;
	}
}
 
int main(){
	
	string num1,num2;
	cin>>N>>num1>>num2;
	int e1,e2;
	getK(num1,e1);
	getK(num2,e2);
	if(compare(num1,num2)){
		cout<< "0."<<num2<<"*10^"<<e2 <<endl;
	}else{
		cout<< "0."<<num1<<"*10^"<<e1<<" ";
		cout<< "0."<<num2<<"*10^"<<e2<<endl;
	}
 
 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值