zoukankan      html  css  js  c++  java
  • PAT甲题题解-1060. Are They Equal (25)-字符串处理(科学计数法)

    又是一道字符串处理的题目。。。

    题意:给出两个浮点数,询问它们保留n位小数的科学计数法(0.xxx*10^x)是否相等。根据是和否输出相应答案。

    思路:
    先分别将两个浮点数转换成相应的科学计数法的格式
    1.point为小数点的索引,初始化为字符串的长度len
    2.not0位第一个非0的数字的索引,初始化为len
    如果not0为len,表明该浮点数为0,特殊处理,形式为0.0..0*10^0
    否则根据point和not0的大小,计算相应的指数。
    接着便是从str的not0开始,给ans赋值,共n位不包括小数点的数字,不足的最后补0即可。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string.h>
    using namespace std;
    const int maxn=200;
    char s1[maxn],s2[maxn];
    int n;
    
    void solve(char*str,char*ans,int n,int &e){
        int len=strlen(str);
        int point=len; //小数点的索引
        for(int i=0;i<len;i++){
            if(str[i]=='.'){
                point=i;
                break;
            }
        }
        int not0=len; //第一个非0的索引
        for(int i=0;i<len;i++){
            if(str[i]!='.' && str[i]!='0'){
                not0=i;
                break;
            }
        }
        //数字为0
        if(not0==len){
            e=0;
            ans[0]='0';
            ans[1]='.';
            for(int i=0;i<n;i++)
                ans[2+i]='0';
            ans[n+2]='';
        }
        else{
            e=point>not0?point-not0:point-not0+1; //指数
            ans[0]='0';
            ans[1]='.';
            for(int i=0,j=not0;i<n;i++,j++){
                if(j<len){
                    if(str[j]!='.')
                        ans[2+i]=str[j];
                    else
                        i--;
                }
                else
                    ans[2+i]='0';
            }
            ans[2+n]='';
        }
    }
    int main()
    {
        scanf("%d %s %s",&n,s1,s2);
        char ans1[maxn],ans2[maxn];
        int e1,e2;
        solve(s1,ans1,n,e1);
        solve(s2,ans2,n,e2);
        if(strcmp(ans1,ans2)==0 && e1==e2){
            printf("YES ");
            printf("%s*10^%d
    ",ans1,e1);
        }
        else{
            printf("NO ");
            printf("%s*10^%d %s*10^%d
    ",ans1,e1,ans2,e2);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    js去重的es6做法和es5做法
    对npm的认识
    pandas_分类与聚合
    pandas_使用透视表与交叉表查看业绩汇总数据
    pandas_使用属性接口实现高级功能
    pandas_一维数组与常用操作
    pandas_DateFrame的创建
    python 连接 mysql 的三种驱动
    Django学习路6_修改数据库为 mysql ,创建mysql及进行迁徙
    Django学习路5_更新和删除数据库表中元素
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6504861.html
Copyright © 2011-2022 走看看