PAT A1060_Are They Equel

本文分享了一段用于处理浮点数规范化问题的AC代码,该代码通过删除前导零、调整指数来处理小数点前后的数字,并确保字符串长度符合指定要求。最后比较两个处理后的浮点数是否相等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AC代码:

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int n;

string hanshu(string s,int& e)
{
    while(s.size()>0 && s[0]=='0')     //清除前置0 
        s.erase(s.begin());
    
    if(s[0]=='.')
    {
        s.erase(s.begin());
        while(s[0]=='0' && s.size()>0)
        {
            e--;
            s.erase(s.begin());
        }
    }
    else
    {
        int k=0;
        while(s[k]!='.' && k<s.length())
        {
            e++;
            k++;
        }
        if(k<s.size())     //找到了小数点 
        {
            s.erase(s.begin()+k);
        }
    }
    
    if(s.size() == 0)
        e=0;
    
    int len=s.size();
    string s3="0";
    if(len>=n)
        s.erase(s.begin()+n,s.end());
    else
    {
        while(n-len)
        {
            s.insert(len,s3);
            len++;
        }
    }
    
    return s;
}


int main(void)
{
    string s1,s2,ss1,ss2;
    int e1=0,e2=0;;
    cin>>n>>s1>>s2;
    
    ss1 = hanshu(s1,e1);
    ss2 = hanshu(s2,e2);
    
    if(ss1==ss2 && e1==e2)
        cout<<"YES 0."<<ss1<<"*10^"<<e1<<endl;
//        printf("YES 0.%s*10^%d\n",ss1.c_str(),e1);
    else
        cout<<"NO 0."<<ss1<<"*10^"<<e1<<" 0."<<ss2<<"*10^"<<e2<<endl;
//        printf("NO 0.%s*10^%d 0.%s*10^%d\n",ss1.c_str(),e1,ss2.c_str(),e2);
    
    return 0;
}

 

转载于:https://www.cnblogs.com/phaLQ/p/10448085.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值