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
Sample Output
下面是我写的代码,用的数组进行计算,先忽略小数点,按整数的形式进行运算,再在结果中计算出应该在哪里填进小数点,进而得到正确结果。
并且格式我也调整了,该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];
}
}
}
现在要你解决的问题是:对一个实数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];
}
}
}
相关文章推荐
- poj 1177picture测试数据结果
- poj1001解题报告+测试数据
- mysql master-slave搭建测试,附带双master FailOver导致数据结果不一致的一些想法
- openjudge 2739 测试了多组数据结果都是正确的,但是oj提交结果为WA,有人感兴趣的话看看
- HFSoft.Data2.0数据持久组件性能简要测试结果
- POJ-1475Pushing Boxes(貌似测试数据有问题)
- shell 抓取网页解析网页 自动读取poj测试数据
- Convnet中由输入图片测试数据并输出结果
- 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较
- POJ的测试数据
- 性能测试工具比较:LoadRunner vs JMeter - 测试结果数据比较
- 存储过程 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果
- poj 3297Open Source 解题报告(附测试数据
- poj1001(大数据)
- 性能测试中影响性能结果数据的因子分析
- 大数据量分页存储过程效率测试附测试代码与结果
- POJ测试数据
- POJ测试数据
- POJ-1088 滑雪 (包含部分自用测试数据)