PAT A1060

代码风格是c++,但是很多处理方式是c的风格,因为c++提供了很多的方法,并且写起来,代码风格更舒服一些

//大致要求的就是输入一个n,一个随便神码数(当然可以是浮点数,也有长度限制,但是这里不把数作为真的“数”,而是作为字符输入然后处理
//这里的字符主要有两种,一个是含大于1的部分,还一个是纯粹的小于1部分,当然没有负数(是否可以作为开始用字符串处理的一个标志?)
//输出的时候是要求是0.xxxx*10^  的形式,这里呢不特意的处理成0.xxx的数据输出,而是要处理成xxx的形式,在输出时不上 0.  和*10^ 的符号

#include <string>
#include <iostream>

using namespace std;//这里不是用gcc编译,是用g++

int n;//表示处理精度

string deal(string s,int& e)
{
    unsigned int k = 0;//k可以作为记录下标的一个变量存在
    while(s.length() > 0 && s[0] == '0')//去除前导0
    {
        s.erase(s.begin());
    }
    if (s[0] == '.') {
        s.erase(s.begin());
        while(s.length() > 0 && s[0]=='0'){
            //去除小数点后的前导0
            s.erase(s.begin());
            e--;//每去掉一个0指数就减少
        }
    }
    else//去掉前导0后不是小数点,那么则找到小数点
    {
        while(k < s.length() && s[k] != '.')
        {
            k++;
            e++;
        }
        if(k < s.length())//如果这里还是小于,说明找到了,提前结束了
        {
            s.erase(s.begin() + k);//删除小数点
        }
    }

    if(s.length() == 0)
    {
        //如果长度为0说明清空了,输入的就是0
        e=0;
    }
    k = 0;
    int num = 0;
    string res;
    while(num < n)//只要精度没有达到
    {
        if(k < s.length()) res += s[k];
        else res += '0';
        k++;
        num++;
    }
    return res;
}

int main(int argc, char const *argv[])
{
    string s1,s2,s3,s4;
    int e1 = 0;
    int e2 = 0;
    cin>>n>>s1>>s2;
    s3 = deal(s1,e1);
    s4 = deal(s2,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、付费专栏及课程。

余额充值