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

来源:互联网 发布:pdf.js ajax 编辑:程序博客网 时间:2024/05/22 01:26

对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 

现在要你解决的问题是:对一个实数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 120.4321 205.1234 156.7592  998.999 101.0100 12

Sample Output

548815620517731830194541.899025343415715973535967221869852721.0000000514855464107695612199451127676715483848176020072635120383542976301346240143992025569.92857370126648804114665499331870370751166629547672049395302429448126.76412102161816443020690903717327667290429072743629540498.1075960194566517745610440100011.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++){
for(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];
}
}
}
阅读全文
0 0