PAT A1060 Are They Equal (***string的应用)

问题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872

Note:
    1.特别注意这个语句一定要放在预处理步骤的最后,否则会后面语句对e进行操作会影响结果。

    2.删除erase()语句内是s的位置,删头用s.erase(s.begin()),而判断s的头是不是‘0’要用s[0] == '0';


	if(s.length() == 0)//若去除前导后s长度变为0,说明这个数是0 
	    e = 0;  
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
//int N;
string deal(string s,int N, int &e){
	int k = 0; //s 的下标
//预处理
//第一步去掉头部的0 
	while(s.length() > 0 && s[0] == '0')
	    s.erase(s.begin());
	    
//第二步,统计指数并去掉小数点	
	if(s[0] == '.'){//去掉前导0后是小数点,说明s是小于1的数 
		s.erase(s.begin());
		while(s.length() > 0 && s[0] == '0'){
			s.erase(s.begin());
			e--;
		} 
	}else{
		while(k < s.length() && s[k] != '.')//寻找小数点 
		{
		    k++;
			e++;
		}
		if(k < s.length())//while 结束后k < s.length(),说明碰到了小数点
		    s.erase(s.begin() + k);//去除小数点 
	}
	
	if(s.length() == 0)//若去除前导后s长度变为0,说明这个数是0 
	    e = 0;  
	    
//预处理完成,当前s头部没有0,中间也没有小数点 
    int num = 0;
    k = 0;
	string res;
	while(num < N){//当精度每到N 
		if(k < s.length())
		    res += s[k++];//只要还有数字, 就加到res末尾 
		else
		    res += '0';//否则res末尾添加0 
		num++; //精度加1 
	}
	return res;	
}
int main(){
	string s1, s2, s3, s4;
    int N;
	cin >> N >> s1 >> s2;
	
	int e1 = 0, e2 = 0;
    s3 = deal(s1,N,e1);
	s4 = deal(s2,N,e2);

	if(s3 == s4 && e1 == e2)
	    cout << "YES 0." << s3 << "*10^"<< e1 << endl;
	else
		cout << "NO 0." << s3 << "*10^" << e1 << " 0." << s4 << "*10^" << e2 << endl;
	
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值