我太难了…
没有用string,而是用的C风格的字符串去写,本来就很麻烦了……然后有一个隐蔽地方有点逻辑错误,看了一晚上没有看出来,要不就是超时要不就是段错误,弄得我都迷茫了…太傻了,看了几个小时之后终于看出了。
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
using namespace std;
int main()
{
char ans[30000];
char Exp[10000];
char Coe[10000];
int ansSize = 0;
int coeSize = 0;
memset(ans, 0, sizeof(char) * 30000);
memset(Exp, 0, sizeof(char) * 10000);
memset(Coe, 0, sizeof(char) * 10000);
bool signOfCoe;
bool signOfExp;
char c;
scanf("%c", &c);
if (c == '+')
{
signOfCoe = true;
}
else
{
signOfCoe = false;
}
while (1)
{
scanf("%c", &c);
if (c == 'E')
{
break;
}
if (c == '.')
{
continue;
}
Coe[coeSize++] = c;
}
scanf("%c", &c);
if (c == '+')
{
signOfExp = true;
}
else
{
signOfExp = false;
}
scanf("%s", Exp);
int ExpNum = signOfExp ? (atoi(Exp) + 1) : (-atoi(Exp) + 1);
if (signOfCoe == false)
{
ans[ansSize++] = '-';
}
if (ExpNum <= 0)
{
ans[ansSize++] = '0';
ans[ansSize++] = '.';
for (int i = 0; i < -ExpNum; i++)
{
ans[ansSize++] = '0';
}
for (int i = 0; i < strlen(Coe); i++)
{
ans[ansSize++] = Coe[i];
}
}
else if (ExpNum > 0)
{
if (ExpNum < strlen(Coe))
{
for (int i = 0; i < ExpNum; i++)
{
ans[ansSize++] = Coe[i];
}
ans[ansSize++] = '.';
for (int i = ExpNum; i < strlen(Coe); i++)
{
ans[ansSize++] = Coe[i];
}
}
else
{
for (int i = 0; i < strlen(Coe); i++)
{
ans[ansSize++] = Coe[i];
}
for (int i = 0; i < ExpNum - strlen(Coe); i++)
{
ans[ansSize++] = '0';
}
}
}
printf("%s\n", ans);
return 0;
}