看了版主置顶的一个文章,我开始做北大的acm题
做到1001这个十分简单的题,就是通不过
请问这是为什么呢?
题目是这样的,
给定一个R 和一个n求 R^n的结果,其中 0.0 <R<29.0 0 < n <= 25. 且R以字符串形式给出点有六列,并包括一个小数点。
给出的列数为
Sample Input
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
这个应该不难的呀。我用字符串模仿乘法操作,在本地测试成功,但是提交上为什么就wrong answeer 呢
代码:
#include <iostream>
using namespace std;
int main()
{
char s[6];
int n;
int i,dotSite,j,nNum,k;
while(cin>>s>>n)
{
if(n==0){
cout<<"1"<<endl;
continue;
}
if(n<0){
continue;
}
for(i=0;i<6;i++){
if(s[i]=='.') break;
}//rescord the . site
dotSite=i;
char *v=new char[5*n];
char *t=NULL;
char *ttemp=new char[5];
char *u=new char[5];
for(i=0,j=0;i<5;i++,j++){
if(s[j]=='.') j++;
ttemp[i]=u[i]=s[j];
}
t=ttemp;
for(nNum=1;nNum<n;nNum++){
char *vTemp=new char[5*nNum+5];
int tt=0;
for(tt=0;tt<5*nNum+5;tt++){
vTemp[tt]='0';
}
for(j=0;j<5;j++){
int uValue=u[5-j-1]-'0';
for(k=0;k<5*nNum;k++){
int tValue=t[5*nNum-k-1]-'0';
int ms=(uValue*tValue)/10;
int mg=(uValue*tValue)%10;
int addItem=(5*(nNum+1)-j-k-1);
if(mg+(vTemp[addItem]-'0')>9){
vTemp[addItem]=(vTemp[addItem]-'0'+mg)%10+'0';
ms++;
}
else{
vTemp[addItem]=(vTemp[addItem]-'0')+mg+'0';
}
tt=-1;
while(ms!=0){
if((vTemp[addItem+tt]-'0')+ms>9){
vTemp[addItem+tt]=(vTemp[addItem+tt]-'0'+ms) %10+'0';
ms=1;
}
else{
vTemp[addItem+tt]=(vTemp[addItem+tt]-'0'+ms)+'0';
ms=0;
}
tt--;
if(addItem+tt<0) break;
}//while ms!=0
}//for k<5*nNum
}//for j<5
delete []t;
t=NULL;
t=vTemp;
}// for nNum
int starti,endi;
for(starti=0;starti<dotSite*n-1;starti++){
if(t[starti]!='0'){
break;
}
}// for stari
for(endi=5*n-1;endi>dotSite*n;endi--){
if(t[endi]!='0'){
break;
}
}// for endi
for(i=starti;i<dotSite*n;i++)
cout<<t[i];
if(endi>dotSite*n){
cout<<".";
for(i=dotSite*n;i<=endi;i++)
cout<<t[i];
}
cout<<endl;
}
return 0;
}
[课程]Linux pwn 探索篇!