⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3423709_ac_16ms_288k.cpp

📁 pku acm 1001的源代码
💻 CPP
字号:
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
string digitStringMultiple(string);
string stringMultiChar(char,string);
string stringAdd(string,string);
int main()
{
	string str,outstr;
	vector<string> VCS,RESULT;
	vector<string>::iterator it;
	while(getline(cin,str))
	{
		if(str=="")
			break;
		VCS.push_back(str);
	}
	for(it=VCS.begin();it!=VCS.end();it++)
	{
		RESULT.push_back(digitStringMultiple(*it));
	}

	for(it=RESULT.begin();it!=RESULT.end();it++)
	{
		str=*it;
		if(str[0]=='0' && str[1]=='.')
			str.erase(str.begin());
		cout<<str<<endl;
	}
	return 0;
}

string digitStringMultiple(string str)
{
	double R;
	int n,i,j,k,exp;
	string result="1",tempstr="",base="",tempresult;
	istringstream strin(str);
	ostringstream strout;
	strin>>R>>n;
	strout<<R;
	base=strout.str();
	int pointPosOfBase=(int)base.find('.');
	int numberOfDecimal=(int)(base.length()-pointPosOfBase-1);
	int totalNumberOfDecimal=numberOfDecimal*n;
	if(pointPosOfBase!=-1)
		base.erase(base.begin()+pointPosOfBase);
	for(i=0;i<n;i++)
	{
		tempresult="0";
		for(j=(int)(base.length()-1);j>=0;--j)
		{
			tempstr=stringMultiChar(base[j],result);
			for(k=(int)(base.length()-1-j);k>0;--k)
			{
				tempstr.insert(tempstr.end(),'0');
			}
			tempresult=stringAdd(tempresult,tempstr);
		}
		result=tempresult;
	}
	if(pointPosOfBase!=-1)
		result.insert(result.end()-totalNumberOfDecimal,'.');
	return result;
}
string stringMultiChar(char ch,string str)
{
	string tempstr=str;
	int carryFlag=0,IER=ch-48;
	for(int i=(int)(str.length()-1);i>=0;i--)
	{
		tempstr[i]=(char)((((str[i]-48)*IER+carryFlag)%10)+48);
		carryFlag=((str[i]-48)*IER+carryFlag)/10;
		if(i==0 && carryFlag!=0)
		{
			tempstr.insert(tempstr.begin(),(char)(carryFlag+48));
		}
	}
	return tempstr;
}
string stringAdd(string str1,string str2)
{
	string temp,result="";
	if(str1.length()>str2.length())
	{
		temp=str1;
		str1=str2;
		str2=temp;
	}
	size_t len1=str1.length(),len2=str2.length();
	size_t dif=len2-len1;
	int carryFlag=0;
	for(size_t i=1;i<=len1;i++)
	{
		result.insert(result.begin(),char((str1[len1-i]-48+str2[len2-i]-48+carryFlag)%10+48));
		carryFlag=(str1[len1-i]-48+str2[len2-i]-48+carryFlag)/10;
	}
	while(dif>=1)
	{
		result.insert(result.begin(),char((str2[dif-1]-48+carryFlag)%10+48));
		carryFlag=(str2[dif-1]-48+carryFlag)/10;
		dif--;
	}
	if(carryFlag!=0)
		result.insert(result.begin(),char(carryFlag+48));
	return result;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -