📄 3423709_ac_16ms_288k.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 + -