PAT 1073. Scientific Notation (20)

這一題自己花的時間有點多。

要注意幾個問題:

1,注意題目的輸入格式,小數點就在固定的位數上,

2,輸入用整個字符串讀取

3,正號不輸出

4 ,考慮正指數和負指數兩種情況就行了

#include <iostream>
#include <cstring>
using namespace std;

char a[20000];

int E; //大E的位置

int exp(int n) //找大E的位置
{
	int temp = 0;
	int i;
	for(i = 0;i<n;i++)
		if(a[i] == 'E'){
			E = i;
			break;
		}
	
	bool flag = false;
	for(i++;i<n;i++)
	{
		if(a[i] == '-')
			flag = true;
		if(a[i] >= '0' && a[i] <= '9')
			temp = temp*10 + a[i] -'0';
	}
	
	if(flag)
		temp *= -1;
	return temp;
}
int main()
{

	scanf("%s",a);

	int n = strlen(a);

	int i = 2;  
	int ex = exp(n);
	bool flag = true;
	if(ex < 0)
	{
		flag = false;
		ex *= -1;
	}
	if(a[0] == '-')
		cout << a[0];

	if(ex == 0)
	{
		for(int j = 1;j < E;j++)
			cout << a[j];
		return 0;
	}

	if(flag)
	{
		int j = 1;
		for(;j<i;j++)
			cout << a[j];
		i++;
		while(ex--)
		{
			if(i<E)
				cout << a[i++];
			else
				cout << 0;
		}
		if( i < E){
			cout << ".";
			while(i < E)
				cout << a[i++];
		}

	}
	else
	{
			cout << "0.";
			ex = ex + 1 - i; 
			while(ex--)
				cout << 0;
			cout << a[1];
			i++;
			while(i < E)
				cout << a[i++];

	}
	cout << endl;

	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章