题目: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;
}