首页 > 其他 > 详细

PAT甲题题解-1060. Are They Equal (25)-字符串处理(科学计数法)

时间:2017-03-05 13:27:02      阅读:264      评论:0      收藏:0      [点我收藏+]

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

题意:给出两个浮点数,询问它们保留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]=\0;
    }
    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]=\0;
    }
}
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\n",ans1,e1);
    }
    else{
        printf("NO ");
        printf("%s*10^%d %s*10^%d\n",ans1,e1,ans2,e2);
    }
    return 0;
}
View Code

 

PAT甲题题解-1060. Are They Equal (25)-字符串处理(科学计数法)

原文:http://www.cnblogs.com/chenxiwenruo/p/6504861.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!