直接看指数:指数是0,照样输出
指数是负数: 0.(exp-1)个0 后面除了小数点,都照样输出
指数是正数,自己判断小数点的位置
// PAT B1048.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
const int maxn = 10010;
char a[maxn];
int _tmain(int argc, _TCHAR* argv[])
{
scanf("%s",a);
int len = strlen(a);
if(a[0] == '-'){
printf("-");
}
int pos;
for(int i = 0;i<len;i++){
if(a[i] == 'E'){
pos = i;
break;
}
}
//求出指数
int exp = 0;
for(int i = pos+2;i<len;i++){
exp = exp*10+(a[i]-'0');
}
//指数为0直接输出
if(exp == 0){
for(int i = 1;i<len;i++)
{
printf("%c",a[i]);
}
return 0;
}
//指数是负数0.(exp-1)个0 后面照样
if(a[pos+1] == '-'){
printf("0.");
for(int i = 1;i<exp;i++)
printf("0");
for(int i = 1;i<pos;i++){
if(a[i] != '.')
printf("%c",a[i]);
}
}else{//指数是正数
int temp = pos-3;
if(exp==temp){//正好变成整数
for(int i = 1;i<pos;i++){
if(a[i] != '.')
printf("%c",a[i]);
}
}else if(exp >temp){//后面要补零
for(int i = 1;i<pos;i++){
if(a[i] != '.')
printf("%c",a[i]);
}
for(int i = 1;i<=exp-temp;i++){
printf("0");
}
}else{//放大之后还是有小数点
for(int i = 1;i<pos;i++){
if(a[i] == '.')
continue;
else{
if(i==exp+2){
printf("%c.",a[i]);
}else{
printf("%c",a[i]);
}
}
}
}
}
system("pause");
return 0;
}