您的位置:首页 > 其它

poj1001在测试他给的数据结果一模一样,但总是wrong answer

2017-12-03 21:52 260 查看
对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 

现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <= 25。

Input

T输入包括多组 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。
Output

对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。
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

下面是我写的代码,用的数组进行计算,先忽略小数点,按整数的形式进行运算,再在结果中计算出应该在哪里填进小数点,进而得到正确结果。
并且格式我也调整了,该tab的地方都改了。

#include <iostream>

using namespace std;

int main(){
char R[6];
int n, point,j,Omul,Oadd;
for(int i=0;i<6;i++){
cin>>R[i];//输入值R;
}
cin>>n;
int a[500],b[500],c[500],d[500];
for(int i=0;i<500;i++){
a[i]=b[i]=c[i]=d[i]=0;
}
for(int i=0;i<6;i++){
if(R[i]=='.'){
point=i;//记录小数点的位置
break;
}
else{
point=-1;
}//当R为整数时;
}
j=1;
for(int i=5;i>point;i--){
a[500-j]=R[i]-48;
j++;

}

for(int i=point;i>0;i--){
a[500-j]=R[i-1]-48;
j++;

}
for(int i=0;i<500;i++){
d[i]=a[i];
}
Omul=Oadd=0;//表示进位;
for(int m=1;m<n;m++){
f
8db4
or(int j=0;j<500;j++){//控制乘数与被乘数相乘的位的位置;;
for(int i=0;i<500-j;i++){//第一个数的所有位数乘以第二个数的第j位;
if(j>0){
b[499-j+1]=0;
}
b[499-i-j]=a[499-i]*d[499-j]+Omul;
Omul=b[499-i-j]/10;
b[499-i-j]=b[499-i-j]%10;
}
for(int i=499;i>=0;i--){
c[i]=c[i]+b[i]+Oadd;
Oadd=c[i]/10;
c[i]=c[i]%10;
}
}
for(int i=0;i<500;i++){
a[i]=c[i];
c[i]=0;
}
}
int key=0;
if(point==-1){
for(int i=0;i<500;i++){
if(a[i]==0&&key==0){

}
else{
cout<<a[i];
key=1;
}
}
}
else{
key=0;
point=5-point;
point=point*n;
for(int i=0;i<500-point;i++){
if(a[i]==0&&key==0){

}
else{
cout<<a[i];
key=1;
}
}
cout<<".";
key=j=0;
for(int i=499;i>=500-point;i--){
if(a[i]==0&&key==0){

}
else{
j=i;
break;
}
}
for(int i=500-point;i<=j;i++){
cout<<a[i];
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: