CodeForces 691C Exponential notation(模拟)

来源:互联网 发布:linux dns配置 redhat 编辑:程序博客网 时间:2024/05/18 01:55

题目:http://codeforces.com/problemset/problem/691/C


题意:将一个数转化成科学计数法的形式


关键是要化繁为简。


#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>using namespace std;char s[1000005];int main(){    while(cin>>s)    {        int n=strlen(s);        int m=n,k=-1,l=n;        //m表示点的位置,若输入中不含点则默认点在最后        //k、l分别表示第一个和最后一个不为零的数字的位置        for(int i=0;i<n;i++)        {            if(s[i]=='.') m=i;            if(s[i]!='.'&&s[i]!='0'&&k==-1) k=i;        }        for(int i=n-1;i>=0;i--)        {            if(s[i]!='.'&&s[i]!='0')            {                l=i;                break;            }        }        if(k==-1) cout<<"0"<<endl;  //说明全为零或点        else        {            cout<<s[k];   //先输出第一个数字            if(l!=k) cout<<".";   //说明不为零的数字不止一个,所以输出点            for(int i=k+1;i<=l;i++)            {                if(s[i]!='.') cout<<s[i];   //输出后面的数字            }            int e;   //计算幂次            if(k>m) e=m-k;            else e=m-k-1;            if(e!=0) cout<<"E"<<e<<endl;            else cout<<endl;        }    }    return 0;}


0 0
原创粉丝点击