`
ysshuai19
  • 浏览: 15356 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

POJ 1001 解题报告 Exponentiation

    博客分类:
  • POJ
阅读更多

高精度浮点数计算。

花了我整整一天时间才写好,POJ上给的测试数据都通过,0的1次方和1的0次方之类的输入和加入一些干扰0的输入测试也都通过,但是提交后AC不了,显示Anwser Wrong,不知道什么问题,也没找出来。崩溃了。

好好练练吧,鉴于道理已明了,先草草结贴,有时间再看。

 

 

#include <iostream>
#include <vector>
#include <string>

using namespace std;

void getResult(vector< vector<int> >&, string, int);
void take0(string&);
void toIntVector(vector<int>&, const string&);
void mul(vector<int>&, vector<int>&);
void takeVetor0(vector<int>&);
void addDot(vector<int>&, int);

int main ()
{
    vector< vector<int> > vvResult;
    string strTmp;
    int iIndex;

    while (cin>>strTmp>>iIndex)
    {
    	getResult(vvResult, strTmp, iIndex);

    	// show result
    	string strResult = "";
    	vector< vector<int> >::iterator itervvResult = vvResult.begin();
		while (itervvResult != vvResult.end())
		{
			vector<int>::iterator iterI = (*itervvResult).begin();
			//cout << "Final viPro: ";
			while (iterI != (*itervvResult).end())
			{
				if (*iterI == 10)
				{
					strResult += ".";
				} else {
					strResult += ('0' + *iterI);
				}
				iterI++;
			}
			cout << strResult << endl;

			itervvResult++;
		}
		vvResult.clear();
    }

    return 0;
}


void getResult(vector< vector<int> >& vvResult, string strBase, int iIndex)
{
	take0(strBase);

	int iPos = -1;
	int iBase = 0;
	while (iBase < strBase.size())
	{
		if (strBase[iBase] == '.')
		{
			iPos = iBase;
		}
		iBase ++;
	}
	if (iPos == -1)
	{
		strBase += ".";
	}

	int iDotLocate = (strBase.size() - 1 - strBase.find(".")) * iIndex;
	strBase.erase(strBase.find("."), 1);

	take0(strBase);

	//cout << "take0: " << strBase << " Dot:" << iDotLocate << endl;

	vector<int> viBase;
	toIntVector(viBase, strBase);
	vector<int> viPro(viBase);

	if (iIndex == 0)
	{
		viPro.clear();
		viPro.assign(1, 1);
		vvResult.push_back(viPro);
		return;
	} else if (strBase == "0" || strBase == ".")
	{
		viPro.clear();
		vvResult.push_back(viPro);
		return;
	}

	while (--iIndex)
	{
		mul(viPro, viBase);
	}

	addDot(viPro, iDotLocate);

	vvResult.push_back(viPro);

}

void take0(string &strBase)
{
	while('0' == strBase[strBase.size() -1] && 1 != strBase.size())
	{
		strBase.erase(strBase.size() -1, 1);
	}
	while('0' == strBase[0] && 1 != strBase.size())
	{
		strBase.erase(0, 1);
	}
}

void toIntVector(vector<int>& viBase, const string& strBase)
{
	int i = 0;
	while (i < strBase.size())
	{
		viBase.push_back(strBase[i++] - '0');
	}
}

void mul(vector<int>& viPro, vector<int>& viBase)
{
	int i = 0;
	int j = 0;
	vector<int> viTmpResult(512, 0);

	// calculate
	int iCount;
	for (i = 0; i < viBase.size(); i++)
	{
		for (j = 0; j < viPro.size(); j++)
		{
			viTmpResult[i + j] += viPro[j] * viBase[i];
			iCount = i + j;
		}
	}

	viPro.clear();
	viPro.assign(512, 0);

	// handle carry
	i = i -1 + j -1;
	j = 0;
	while (i >= 0)
	{
		viPro[j] += viTmpResult[i];
		if (viPro[j] /10 > 0)
		{
			viPro[j+1] += viPro[j] / 10;
			viPro[j] %= 10;
		}

		i--;
		j++;
	}

	while (viPro[j] != 0)
	{
		viPro[j+1] += viPro[j] / 10;
		viPro[j] %= 10;

		j++;
	}

	// reverse vi
	i = 0;
	j -= 1;
	//cout <<"i, j "<< i << " "<< j-i <<endl;
	while (i < j-i)
	{
		viPro[i] = viPro[i] + viPro[j - i];
		viPro[j - i] = viPro[i] - viPro[j - i];
		viPro[i] = viPro[i] - viPro[j - i];

		i++;
	}
	//cout <<"i, j "<< i -1 << " "<< j-i +1 <<endl;

	// erase 0
	takeVetor0(viPro);

}

void takeVetor0(vector<int>& vi)
{
	vector<int>::iterator iterI = vi.end();
	iterI--;
	while (*iterI == 0)
	{
		iterI--;
	}
	iterI++;
	if (iterI != vi.end())
	{
		vi.erase(iterI, vi.end());
	}
}

void addDot(vector<int>& vi, int iDot)
{
	//cout << "iDot: " << iDot << endl;
	if (iDot == 0)
	{
		return;
	}

	vector<int>::iterator iterI = vi.begin();

	if (vi.size() < iDot)
	{
		vi.insert(iterI, iDot - vi.size(), 0);
		vi.insert(vi.begin(), 10);
	}
	else {
		vi.insert(iterI + (vi.size() - iDot), 10);
	}
}
 

 

0
0
分享到:
评论

相关推荐

    POJ 1001 Exponentiation解题报告

    根据题目要求,本文将对POJ 1001 Exponentiation这道题进行详细的解析,包括题目背景、输入输出格式、样例分析、解题思路及算法实现等。 ### 题目背景 POJ (Peking University Online Judge) 是一个著名的在线编程...

    poj 3414解题报告

    poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告

    poj 1012解题报告

    poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告

    poj 2329解题报告

    poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告

    poj 1001 Exponentiation

    poj 1001 Exponentiation用字符串操作的

    poj 1440解题报告

    poj 1440解题报告 poj 1440解题报告 poj 1440解题报告 poj 1440解题报告

    poj 3083解题报告

    poj 3083解题报告poj 3083解题报告poj 3083解题报告poj 3083解题报告

    poj 1659解题报告

    poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告

    poj 3720解题报告

    poj 3720解题报告poj 3720解题报告poj 3720解题报告poj 3720解题报告

    北大poj解题报告

    这个“北大poj解题报告”包含了作者在使用POJ平台解题过程中的学习总结和经验分享,旨在帮助软件工程专业的学生提升编程能力和算法理解。 解题报告通常会涵盖以下几个方面: 1. **基础算法讲解**:解题报告中可能...

    poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告

    poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...

    poj1001java biginteger

    用java的biginteger实现的poj1001,比较简单的方法

    acm竞赛----北大poj详细解题报告

    【ACM竞赛与北大POJ解题报告】 在编程竞赛领域,ACM(国际大学生程序设计竞赛,简称ACM/ICPC)是一项极具影响力的比赛,它挑战参赛者的算法设计、问题理解和快速编码能力。北京大学(Peking University)的在线判题...

    POJ1001的一个解决方案

    简单地poj1001代码,是典型的利用数组输出结果的方法,关键的是测试数据。

    poj1691解题报告

    ### poj1691解题报告 #### 题目信息 - **题目名称**:Painting A Board - **时间限制**:1S - **内存限制**:1000K - **提交总数**:62 - **通过总数**:35 - **来源**:...

    80道POJ解题报告

    【标题】"80道POJ解题报告"所涉及的知识点主要集中在ACM(国际大学生程序设计竞赛)和POJ(编程Online Judge系统)上。POJ是北京大学主办的一个在线编程竞赛平台,广泛用于训练和提升程序员的算法设计与实现能力。80...

    POJ 1001 大数阶乘

    poj 1001答案

    POJ 1316解题报告

    【POJ 1316 解题报告】 本题源自北京大学举办的ACM竞赛,题号为POJ 1316,主要涉及算法设计和数组的应用。题目要求找到10000以内的所有self-number,并输出它们。Self-number是一个特殊的整数序列,它的定义是该数...

    poj 2392 解题报告

    《POJ 2392解题报告:高效计算最高堆积高度》 本文将深入解析POJ 2392这个编程题目,该题目要求利用给定的不同高度、耐压性和数量的block,来确定能够堆叠出的最大高度。解决这个问题的关键在于运用排序和动态规划...

    北大ACM_POJ_解题报告

    【北大ACM_POJ_解题报告】是北京大学ACM在线评测系统POJ的解题资源集合,这个压缩包包含了对POJ平台上的各种类型ACM竞赛题目的详细解答。ACM,全称国际大学生程序设计竞赛(International Collegiate Programming ...

Global site tag (gtag.js) - Google Analytics