| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
总是runtime error ,贴代码,哪个前辈帮我看看啊。。。。#include<iostream>
using namespace std;
void work(int a[10],int la,int n,int dot);
int main()
{
freopen("in1001.txt","r",stdin);
int n,dot,la,i,j,a[7];
char ch[6];
while(cin>>ch>>n)
{
j=6;
dot=0;
for(i=0;i<6;i++)
if(ch[i]=='.')
dot=5-i; //找小数点后有几位
else
{
a[j]=int(ch[i])-int('0'); //转到数组a
j--;
}
if(dot)
{
la=5;
for(i=1;i<=5;i++) a[i]=a[i+1];//调整数组a
}
else la=6;
//下面是把前后的0都清掉
while(!a[la] && la) la--;
while(!a[1] && la && dot)
{
for(j=2;j<=la;j++)
a[j-1]=a[j];
la--;
dot--;
}
if(n==0) cout<<1<<endl;
else
if(la==0) cout<<0<<endl;
else
work(a,la,n,dot);//开始计算 对长度为la的数组a计算n次方,小数位有dot
}
return 0;
}
void work(int a[7],int la,int n,int dot)
{
int b[155]={0,1},c[155],lb=1,i,j,jw,lc,t;//b数组保存最终结果,初值是1。也就是0次方 lb为长度,初值为1
dot=dot*n;//最终结果的小数点后位数
while(n--)//进行n次
{
for(i=1;i<=155;i++) c[i]=0;//c为临时数组,清零
for(i=1;i<=la;i++)
{
jw=0;//进位
for(j=1;j<=lb;j++)//开始计算高精度惩罚,保存到c
{
t=(c[j+i-1]+a[i]*b[j]+jw);
c[j+i-1]=t%10;
jw=t/10;
}
if(jw) //判断有没有溢出长度
{
c[lb+i]=jw;
lc=lb+i;
}
else lc=lb+i-1;
}
for(i=1;i<=lc;i++)//将每乘一次的结果都保存到b
b[i]=c[i];
lb=lc;
}
//以下为输出b
if(dot>lb)
{
cout<<'.';
for(i=dot;i>lb;i--)
cout<<0;
for(i=lb;i>0;i--)
cout<<b[i];
cout<<endl;
}
else
{
for(i=lb;i>0;i--)
if(i==dot) cout<<'.'<<b[i];
else cout<<b[i];
cout<<endl;
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator