【PAT】1060

本文提供了一个PAT-A 1060题目的解答思路及代码实现,通过结构化数值比较两个浮点数字符串是否相等,并输出标准化形式。

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

1、题目地址:http://www.patest.cn/contests/pat-a-practise/1060
2、代码
以下代码通不过最后一个测试点

#include <iostream>
#include <vector>
#include <string>

using namespace std;


struct number{
    string base;
    int exp;

};
bool operator==(const number &l,const number &r){
    if(l.base == r.base && l.exp == r.exp)
        return true;
    return false;
}
number stand_form(string source,int n){
    number result;

    result.base = "0.";
    size_t len = n + 2;
    unsigned int i ;
    bool input = false;
    for(i = 0; i < source.size();++i){
        if(input){
            if(result.base.size() == len)
                    break;
            else if(source[i] != '.')
                    result.base.push_back(source[i]);
        }else {
            if(source[i] != '0' && source[i] != '.'){
                input = true;
                result.base.push_back(source[i]);
            }
        }
    }
    while(result.base.size() < len){
        result.base.push_back('0');
    }

    result.exp = 0;
    for(unsigned int i=0;i < source.size();++i){
        if(source[i] != '.' ){
            if(source[i] == '0' && result.exp == 0)
                ;
            else 
                result.exp++;
        }else if(source[i] == '.'){
            if(result.exp > 0)
                break;
            while(i < source.size()-2 && source[++i] == '0'){
                result.exp--;
            }
            i = source.size();//退出for

        }
    }


    return result;

}
int main()
{
    int N;
    string A,B;
    cin >> N >> A >> B;
    bool equal = false;
    number stand_A,stand_B;
    stand_A = stand_form(A,N);
    stand_B = stand_form(B,N);
    if(stand_A == stand_B)
        equal = true;
    if(equal){
        cout << "YES" << " " << stand_A.base;
        cout << "*10^" << stand_A.exp; 
        cout << endl;
    }else{
        cout << "NO" << " ";

        cout << stand_A.base ;
        cout << "*10^" << stand_A.exp;
        cout << " ";

        cout << stand_B.base;
        cout << "*10^" << stand_B.exp;
        cout << endl;
    }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值