您的位置:首页 > 其它

Codeforces 691C Exponential notation

2016-07-26 10:43 330 查看
模拟。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi = acos(-1.0), eps = 1e-8;
void File()
{
freopen("D:\\in.txt", "r", stdin);
freopen("D:\\out.txt", "w", stdout);
}
inline int read()
{
char c = getchar();  while (!isdigit(c)) c = getchar();
int x = 0;
while (isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); }
return x;
}

const int maxn=1000100;
char s[maxn],t[maxn];

void f()
{
bool x=0;
int len=strlen(s); for(int i=0;i<len;i++) if(s[i]=='.') x=1;
if(x==0) s[len]='.', s[len+1]='0';
else
{
if(s[len-1]=='.') s[len]='0';
else if(s[0]=='.') { for(int i=len;i>=1;i--) s[i]=s[i-1]; s[0]='0'; }
}
}

void g()
{
int sz=0; strcpy(t,s); memset(s,0,sizeof s);
int x; for(int i=0;t[i];i++) if(t[i]=='.') x=i;
int pos=x-1; for(int i=0;i<x-1;i++) if(t[i]!='0'){ pos=i; break; }
for(int i=pos;i<=x;i++) s[sz++]=t[i];
int len=strlen(t); pos=x+1; for(int i=len-1;i>=pos;i--) if(t[i]!='0'){ pos=i; break; }
for(int i=x+1;i<=pos;i++) s[sz++]=t[i];
}

void out()
{
int x; for(int i=0;s[i];i++) if(s[i]=='.') x=i;
int len=strlen(s);
if(x==1&&s[0]=='0')
{
int pos=-1; for(int i=2;i<len;i++) if(s[i]!='0') { pos=i; break; }
if(pos==-1) printf("0\n");
else
{
if(pos==len-1) printf("%cE%d",s[pos],1-pos);
else
{
printf("%c.",s[pos]); for(int i=pos+1;i<len;i++) printf("%c",s[i]);
printf("E%d\n",1-pos);
}
}
}
else if(x==1&&s[0]!='0')
{
if(s[len-1]=='0') printf("%c\n",s[0]);
else printf("%s\n",s);
}
else if(x!=1)
{
int pos=-1; for(int i=len-1;i>=1;i--) if(s[i]!='0'&&s[i]!='.') {pos=i; break;}
if(pos==-1) printf("%cE%d\n",s[0],x-1);
else
{
printf("%c.",s[0]); for(int i=1;i<=pos;i++) if(s[i]!='.') printf("%c",s[i]);
printf("E%d\n",x-1);
}
}
}

int main()
{
memset(s,0,sizeof s); scanf("%s",s);
f(); g(); out();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: