ACM PKU 1001 输出错误
/*给定一个R(0.0000<R<99.999)以及n(0<n<=25),R有6个字符输出R^n的精确数值。*/#include<stdio.h>intmain(void...
/*
给定一个R(0.0000<R<99.999)以及n(0<n<=25),R有6个字符
输出R^n的精确数值。
*/
#include<stdio.h>
int main(void)
{
int R1,R2;
int n,m;
int i,j,f,l,k;
int r[6]={0};
int a[150]={0},b[150]={0};
printf("Input R n:");
scanf("%d.%d %d",&R1,&R2,&n);
a[48]=r[0]=R1/10;
a[49]=r[1]=R1%10;
i=0;
if(r[0]==0)
{
i++;
a[50]=r[2]=R2/1000;
R2=R2%1000;
}
a[50+i]=r[2+i]=R2/100;
R2=R2%100;
a[51+i]=r[3+i]=R2/10;
R2=R2%10;
a[52+i]=r[4+i]=R2;
for(j=2;j<=n;j++) //n的循环
{
m=0; //m为进位使用
for(k=5;k>=0;k--)
{
for(i=49+4*n;i>=50-2*n;i--)
{
b[i+k-1]+=a[i]*r[k]+m;
m=b[i+k-1]/10;
b[i+k-1]=b[i+k-1]%10;
}
}
for(i=0;i<150;i++)
{
a[i]=b[i];
b[i]=0;
}
}
for(i=149;i>=50;i--) //l为输出的最后一个小数的标志
{
l=i;
if(a[i]!=0)
{
break;
}
}
k=0;
for(i=0;i<=49;i++) //f为第一个输出的整数的标志
{
k+=a[i];
f=i;
if(a[i]!=0)
{
break;
}
}
if(k!=0)
for(i=f;i<=l;i++)
{
printf("%d",a[i]);
if(i==49)
printf(".");
}
else
{
printf(".");
for(i=50;i<=l;i++)
{
printf("%d",a[i]);
}
}
printf("\n");
}
输出和题目要求一样,为什么提交错误 展开
给定一个R(0.0000<R<99.999)以及n(0<n<=25),R有6个字符
输出R^n的精确数值。
*/
#include<stdio.h>
int main(void)
{
int R1,R2;
int n,m;
int i,j,f,l,k;
int r[6]={0};
int a[150]={0},b[150]={0};
printf("Input R n:");
scanf("%d.%d %d",&R1,&R2,&n);
a[48]=r[0]=R1/10;
a[49]=r[1]=R1%10;
i=0;
if(r[0]==0)
{
i++;
a[50]=r[2]=R2/1000;
R2=R2%1000;
}
a[50+i]=r[2+i]=R2/100;
R2=R2%100;
a[51+i]=r[3+i]=R2/10;
R2=R2%10;
a[52+i]=r[4+i]=R2;
for(j=2;j<=n;j++) //n的循环
{
m=0; //m为进位使用
for(k=5;k>=0;k--)
{
for(i=49+4*n;i>=50-2*n;i--)
{
b[i+k-1]+=a[i]*r[k]+m;
m=b[i+k-1]/10;
b[i+k-1]=b[i+k-1]%10;
}
}
for(i=0;i<150;i++)
{
a[i]=b[i];
b[i]=0;
}
}
for(i=149;i>=50;i--) //l为输出的最后一个小数的标志
{
l=i;
if(a[i]!=0)
{
break;
}
}
k=0;
for(i=0;i<=49;i++) //f为第一个输出的整数的标志
{
k+=a[i];
f=i;
if(a[i]!=0)
{
break;
}
}
if(k!=0)
for(i=f;i<=l;i++)
{
printf("%d",a[i]);
if(i==49)
printf(".");
}
else
{
printf(".");
for(i=50;i<=l;i++)
{
printf("%d",a[i]);
}
}
printf("\n");
}
输出和题目要求一样,为什么提交错误 展开
2个回答
展开全部
1.请严格按照题目要求输入输出
题目没有要求输出Input R n:
2.这题是多组数据
使用while(scanf()!=EOF)
3.这题是浮点数高精度乘方
结果可能有几百位
如果会JAVA就很简单
附AC代码:
#include<stdio.h>
#include<string.h>
int d;
char* mul(char a[],char b[])
{
int lena=strlen(a)-1,lenb=strlen(b)-1,n=0,i,j,t;
int s[1001]={0};
for(i=lena;i>=0;i--)
{
n=lena-i;t=0;
for(j=lenb;j>=0;j--)
{
s[n]=s[n]+(a[i]-48)*(b[j]-48)%10+t;
t=(a[i]-48)*(b[j]-48)/10;
if(s[n]>9)
{
t+=s[n]/10;
s[n]%=10;
}
n++;
}
if(t>0)
s[n]=t;
else
n--;
}
for(i=0;i<=n;i++)
a[i]=s[i]+48;
a[i]=0;
_strrev(a);
return a;
}
void pow(char s[],int n)
{
char *a;
int i,j,len;
a= new char[1001];
strcpy(a,s);
for(int i=1;i<n;i++)
a=mul(a,s);
len=strlen(a);
for(i=len-1;a[i]=='0'&&i>=len-d;i--);
if(i+1!=len)
a[i+1]='*';
for(i=0;a[i]=='0'&&i<len-d;i++);
for(j=i;i<len;i++)
{
if(a[i]=='*')
break;
if(i==len-d)
putchar('.');
putchar(a[i]);
}
if(i==j)
putchar('0');
puts("");
delete []a;
}
int main()
{int n,i,j,len;
char s[101];
while(scanf("%s%d",s,&n)==2)
{
if(!n)
{
puts("1");
continue;
}
len=strlen(s)-1;
d=0;
for(i=len;i>=0;i--)
if(s[i]=='.')
{
d=(len-i)*n;
for(j=i;j<=len;j++)
s[j]=s[j+1];
s[len]=0;
break;
}
pow(s,n);
}
}
题目没有要求输出Input R n:
2.这题是多组数据
使用while(scanf()!=EOF)
3.这题是浮点数高精度乘方
结果可能有几百位
如果会JAVA就很简单
附AC代码:
#include<stdio.h>
#include<string.h>
int d;
char* mul(char a[],char b[])
{
int lena=strlen(a)-1,lenb=strlen(b)-1,n=0,i,j,t;
int s[1001]={0};
for(i=lena;i>=0;i--)
{
n=lena-i;t=0;
for(j=lenb;j>=0;j--)
{
s[n]=s[n]+(a[i]-48)*(b[j]-48)%10+t;
t=(a[i]-48)*(b[j]-48)/10;
if(s[n]>9)
{
t+=s[n]/10;
s[n]%=10;
}
n++;
}
if(t>0)
s[n]=t;
else
n--;
}
for(i=0;i<=n;i++)
a[i]=s[i]+48;
a[i]=0;
_strrev(a);
return a;
}
void pow(char s[],int n)
{
char *a;
int i,j,len;
a= new char[1001];
strcpy(a,s);
for(int i=1;i<n;i++)
a=mul(a,s);
len=strlen(a);
for(i=len-1;a[i]=='0'&&i>=len-d;i--);
if(i+1!=len)
a[i+1]='*';
for(i=0;a[i]=='0'&&i<len-d;i++);
for(j=i;i<len;i++)
{
if(a[i]=='*')
break;
if(i==len-d)
putchar('.');
putchar(a[i]);
}
if(i==j)
putchar('0');
puts("");
delete []a;
}
int main()
{int n,i,j,len;
char s[101];
while(scanf("%s%d",s,&n)==2)
{
if(!n)
{
puts("1");
continue;
}
len=strlen(s)-1;
d=0;
for(i=len;i>=0;i--)
if(s[i]=='.')
{
d=(len-i)*n;
for(j=i;j<=len;j++)
s[j]=s[j+1];
s[len]=0;
break;
}
pow(s,n);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询