PTA 科学计数法 C语言实现

#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;
}

求好方法记得艾特我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值