当前位置: 代码迷 >> C语言 >> 一个编程题目,求解题思路,不要求过程,当然有过程更好,望各位高手不吝赐教!
  详细解决方案

一个编程题目,求解题思路,不要求过程,当然有过程更好,望各位高手不吝赐教!

热度:149   发布时间:2008-05-12 13:54:39.0
10204081632653061224489795918367305
*                                 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]]
----------------解决方案--------------------------------------------------------