* 5
--------------------------------------
51020408163265306122448979591836525
Wrong Answer
[color=white]
----------------解决方案--------------------------------------------------------
还有10 6结果为
16949152542372881355932203389830508474576271186440677966010
我要再下个计算器……这个大数计算器有Bug……
----------------解决方案--------------------------------------------------------
16949152542372881355932203389830508474576271186440677966010 *6
101694915254237288135593220338983050847457627118644067796060
Wrong Answer
[color=white]
----------------解决方案--------------------------------------------------------
Orz发现一个Bug,马上改………………
没想到不做OJ都会有WA的噩梦啊………………
----------------解决方案--------------------------------------------------------
5 5:102040816326530612244897959183673469387755
p是多位数的时候还有Bug,继续调试……
[[it] 本帖最后由 StarWing83 于 2008-5-12 14:22 编辑 [/it]]
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int main()
{
int p,q;
while (scanf("%d%d",&p,&q)!=EOF)
{
int a[1000]={0},res=p,i=0,j;
//将p送往a,并计算p的位数为j
for(j=0;res;a[j++]=res%10,res/=10);
//运算结束时,最高位(res)的值为p
while(res!=p)
{
//计算第i个结果,同时应该是第i+j个数位的值
res=a[i]*q+res/10;
//赋值
a[i+j]+=res%10;
i++;
}
while (i--)
printf("%d",a[i]);
printf("\n");
}
}
搞不定了……飞燕帮忙看看,计算一位p的时候结果正确,但是如果p不止一位了,终止条件似乎就没有作用了。比如10 6,老是在没算完的时候就停止计算了……当i=74的时候,a[i]=7,原res=41,1已经赋值给a[i+j-1]=a[75],res=7*6+41/10=46,并将个位6赋值给a[i+j]=a[76]。然后i=75,a[i]=1(73计算出来的),原res=46,res=1*6+46/10=10,这个10是要赋值给a[i+j]和a[i+j+1]的,按理说这个时候应该计算完了,从第78位开始是1,77是0,然后从76开始就应该是答案61769616026711185308848080133555926544240400667779632721202003338898163606010
但是这个数字乘以6的结果是:370617696160267111853088480801335559265442404006677796327212020033388981636060,前面多了370三个数字……为什么呢?纠结……真正的停止计算的条件是什么啊?飞燕教一下………………
----------------解决方案--------------------------------------------------------
翅膀你好幸福,我刚又被老师喊过去骂了,大数相乘可不可以考虑字符数组做..像2进制那样处理呢?
----------------解决方案--------------------------------------------------------
回LS:不行,像二进制处理的话转换会很麻烦。只能用BCD或者其他十进制编码来做……虽然慢一点……
----------------解决方案--------------------------------------------------------
判断条件改为 while(!(res==p && a[i]==0)),10 6计算出了正确的值,但是这个条件是临时的,用这个条件7 5出错……恩……我在考虑 while(!(res==p && a[i]==p%10)),算了,上课去,概率课的时候慢慢算……
01669449081803005008347245409015025041736227045075125208681135225375626043405676
12687813021702838063439065108514190317195325542570951585976627712854757929883138
56427378964941569282136894824707846410684474123539232053422370617696160267111853
08848080133555926544240400667779632721202003338898163606010
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int main()
{
int p,q;
while (scanf("%d%d",&p,&q)!=EOF)
{
char a[1000]={0};
int res=p,i=0,j;
for(j=0;res;a[j++]=res%10,res/=10);
for(;!(res==p && a[i]==p%10);i++)
{
res=a[i]*q+res/10;
a[i+j]=res%10;
}
if(a[i]==0)printf("%d",a[i]);
while (i--)
printf("%d",a[i]);
printf("\n");
}
}
给出一个暂时比较满意的程序……上课时再想……奔了先……
[[it] 本帖最后由 StarWing83 于 2008-5-12 15:40 编辑 [/it]]
----------------解决方案--------------------------------------------------------