#include <iostream>
#include <cstring>
static void negative(char arr1[],char arr2[], int address);
static void positive(char arr1[], char arr2[],int address);
static int char_to_number(char arr[],int index);
static bool judge(char arr[],int index);
int main()
{
char number1[10100];
char number2[10100];
scanf("%s",number1);
unsigned int index = 0;
while ((index < strlen(number1)) && (number1[index] != 'E'))
{
number2[index] = number1[index];
index++;
}
if (number1[index + 1] == '-')
negative(number1,number2,index);
else if (number1[index + 1] == '+')
positive(number1,number2,index);
return 0;
}
static void negative(char arr1[],char arr2[], int address)
{
if (!judge(arr2,address)) {
if(arr2[0] == '+') printf("0");
else printf("-0");
return;
}
int index = 0;
int exponent = char_to_number(arr1,address + 2);
if (exponent)
{
if (arr2[0] == '-') printf("-0.");
else printf("0.");
while (index++ < (exponent - 1)) printf("0");
printf("%c",arr2[1]);
index = 3;
while (index < address) printf("%c",arr2[index++]);
}
else
{
if (arr2[0] == '-') printf("-");
while (index < address) printf("%c",arr2[++index]);
}
}
static void positive(char arr1[], char arr2[],int address)
{
if (!judge(arr2,address)) {
if(arr2[0] == '+') printf("0");
else printf("-0");
return;}
int index = 1;
bool test = false;
int exponent = char_to_number(arr1,address + 2);
if (arr2[0] == '-') printf("-");
if (exponent < (address - 2))
{
while (index <= exponent + 2)
{
if (arr2[index] != '.' && (arr2[index] != '0' || test))
{
test = true;
printf("%c",arr2[index]);
}
index++;
}
if (test && exponent != (address - 3)) printf(".");
else if(exponent != (address - 3)) printf("0.");
else return;
while (index < address) printf("%c",arr2[index++]);
}
else
{
while (index < address)
{
if ((arr2[index] != '.') && (arr2[index] != '0' || test))
{
test = true;
printf("%c",arr2[index]);
}
index++;
}
while (index++ <= exponent + 2) printf("0");
}
}
static int char_to_number(char arr[],int index)
{
int sum = 0;
unsigned int begin = index;
while (begin < strlen(arr))
sum = sum * 10 + arr[begin++] - '0';
return sum;
}
static bool judge(char arr[],int index)
{
int sum = 0;
int i = 1;
while (i < index)
{
if (arr[i] != '.')
sum += arr[i] - '0' ;
i++;
}
if (sum) return true;
else return false;
}
PTA 科学计数法 C语言实现
最新推荐文章于 2025-04-23 17:48:22 发布