PAT乙级 C语言 1024 科学计数法

本文介绍了一篇关于如何使用C语言高效处理科学计数法的博客,重点讲解了如何通过优化代码避免不必要的字符处理,以及提供了一个PAT乙级问题的解决方案。作者提到的改进点包括忽略多余的位数和利用正则表达式输入,旨在提升代码效率。
摘要由CSDN通过智能技术生成

注意点:俺没有注意到个位数是1位……且可以用"%[^E]E%d"输入,要不可以省一堆压根没用的东西……但我懒得改了

我觉得这个写的很好PAT乙级1024. 科学计数法(C语言)_对方北方-CSDN博客

#include<stdio.h>
#include<stdlib.h>
int sort(char*a,int t,int p,int q);
int main(){
    char a[100000];
    scanf("%s",a);
    int m,n,p,q;
    if(a[0]=='-'){
        printf("-");
    }
    for(m=0;a[m]!='.';m++);
    for(n=m;a[n]!='E';n++);
    p=m-1;
    q=n-m-1;
    int r,s,t;
    char b[100000];
    s=0;
    for(r=n+1;a[r]!='\0';r++){
        b[s]=a[r];
        s++;
    }
    t=atoi(b);
    int i=0;
    char c[100000];
    for(s=1;s<n;s++){
        c[i]=a[s];
        i++;
    }
    int sign=sort(c,t,p,q);
    if(sign==1){
        printf("0.");
        for(i=0;i<-p-t;i++){
            printf("0");
        }
        for(i=0;c[i]!='\0';i++){
            printf("%c",c[i]);
        }
    }else if(sign==-1){
        for(i=0;c[i]!='\0';i++){
            printf("%c",c[i]);
        }
        for(i=0;i<t-q;i++){
            printf("0");
        }
    }else{
        for(i=0;c[i]!='\0';i++){
            printf("%c",c[i]);
        }
    }
    return 0;
}

int sort(char*a,int t,int p,int q){
    int i;
    if(t<=-p){
        for(i=p;a[i+1]!='\0';i++){
            a[i]=a[i+1];
        }
        a[i]='\0';
        return 1;
    }else if(t>=q){
        for(i=p;a[i+1]!='\0';i++){
            a[i]=a[i+1];
        }
        a[i]='\0';
        return -1;
    }else if(t>0){
        for(i=p;i<p+t;i++){
            a[i]=a[i+1];
        }
        a[i]='.';
        return 0;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值