现在的位置: 首页 > 综合 > 正文

POJ1001

2019年09月12日 ⁄ 综合 ⁄ 共 1272字 ⁄ 字号 评论关闭
当初改的时候思路比较乱,代码很丑,勿喷

 

#include "iostream"
#include "cstring"
#include "string"
#define LEN_MAX 135
using namespace std;

int FindPoint(string &Num)
{
	for(size_t ix = 0 ; true ; ix ++ )
	{
		if( Num[ix] == '.')
		{
			return (int)ix;
		}
	}
}

void  FindZero(string &Num)
{
	Num.erase(FindPoint(Num),1);
	for( size_t ix = 0 ; Num[ix] == '0'; )
	{
		Num.erase((int)ix,1);
	}
}


void  ClZero(string  &Num)
{
	for(size_t ix = Num.size() - 1 ; ix != -1 && Num[ix] == '0'; ix -- )
	{
		Num.erase((int)ix,1);
	}
}



void Multiplication( string &Long  , string &Short , char * Aw , int * Container )
{
	short TLength = (short)Short.size()+ (short)Long.size();
	Aw[0] = '\0';
	for(short i = 0 ; i < TLength - 1 ; i ++ )
	{
		Container[i] = 0;
	}
	for(short ix = 0 ; ix != Short.size() ; ix ++ )
	{
		for(short i = 0 ; i != Long.size() ; i ++ )
		{
			Container[i + ix] += (Short[ix] - '0') * (Long[i] - '0');
		}
	}
	for(short ix = TLength - 2 ; ix != 0 ; ix -- )
	{
		Container[ix - 1] += Container[ix] / 10;
		Container[ix] = Container[ix] % 10;
	}
	for(short ix = 0 ; ix != TLength - 1 ; ix ++ )
	{
		sprintf(Aw + strlen(Aw),"%ld",Container[ix]);
	}
}


int main(void)
{
	string N,Num2;
	int ac[LEN_MAX];
	int n;
	while(cin >> N >> n)
	{
		ClZero(N);
		short Ad = ( N.size() - FindPoint(N) - 1 )* n;
		FindZero(N);
		if(!N.empty())
		{
			Num2 = N;
			for(size_t ix = 1 ; ix != n ; ix ++)
			{
				char Answer[LEN_MAX];
				Multiplication(N,Num2,Answer,ac);
				N.assign(Answer);
			}
			if(Ad > 0)
			{
				if(Ad > N.size())
				{
					cout << '.';
					for(size_t i = 0 ; i < Ad - N.size() ; i ++ )
					{
						cout << '0';
					}
				}
				else
				{
					N.insert(N.size() - Ad,".");
				}
			}
			cout << N << endl;
		}
		else
		{
			cout << "0" << endl;
		}
	}
	return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.