• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            我叫張小黑
            張小黑的掙扎生活
            posts - 66,  comments - 109,  trackbacks - 0

            這道題很煩。。我的代碼也很煩。。我想也沒人愿意會看

            下面是為我找錯誤提供方便的幾個地方:

            http://blog.csdn.net/tiaotiaoyly/archive/2008/02/11/2087975.aspx
            他總結得很好。。但是對我幫助不大。。呵呵。。不過可以參考一下
            開始幾個錯誤還是自己的數據測出來的。。
            我最致命的錯誤是橫線的輸出
            橫線的長度其實取決于上下兩個數的長度的。。我一直以為是取決于最長數的長度

            以下是代碼。。剛好利用這個題熟悉了一下大數模板

            #include<iostream>
            #define MaxN 
            3500
            #define max(a,b) (a
            >b?a:b)
            #define max3(a,b,c) (max(a,max(b,c)))
            char str[MaxN],x[MaxN],y[MaxN];
            struct HP
            {
                
            int len,s[MaxN];
            }a,b,c;
            void StrHP(
            const char *s,HP&x)
            {
                x.len
            =(int)strlen(s);
                
            for(int i=1;i<=x.len;i++)
                    x.s[i]
            =s[x.len-i]-'0';
            }
            void Int2HP(
            int inte,HP&x)
            {
                
            if(!inte)
                {
                    x.len
            =1;
                    x.s[
            1]=0;
                    return;
                }
                memset(x.s,
            0,sizeof(x.s));
                
            for(x.len=0;inte>0;)
                {
                    x.s[
            ++x.len]=inte%10;
                    inte
            /=10;
                }
            }
            void Multi(
            const HP a,const HP b,HP &c)
            {
                
            int i,j;
                c.len
            =a.len+b.len;
                
            for(i=1;i<=c.len;i++)
                    c.s[i]
            =0;
                
            for(i=1;i<=a.len;i++)
                    
            for(j=1;j<=b.len;j++)
                        c.s[i
            +j-1]+=a.s[i]*b.s[j];
                
            for(i=1;i<c.len;i++)
                {
                    c.s[i
            +1]+=c.s[i]/10;
                    c.s[i]%
            =10;
                }
                
            while(c.s[i])
                {
                    c.s[i
            +1]=c.s[i]/10;
                    c.s[i]%
            =10;
                    i
            ++;
                }
                
            while(i>1&&!c.s[i])i--;
                c.len
            =i;
            }
            void Plus(
            const HP a,const HP b,HP &c)
            {
                
            int i;
                c.s[
            1]=0;
                
            for(i=1;i<=a.len||i<=b.len||c.s[i];i++)
                {
                    
            if(i<=a.len)
                        c.s[i]
            +=a.s[i];
                    
            if(i<=b.len)
                        c.s[i]
            +=b.s[i];
                    c.s[i
            +1]=c.s[i]/10;
                    c.s[i]%
            =10;
                }
                c.len
            =i-1;
                
            if(c.len==0)
                    c.len
            =1;
            }
            void Substract(
            const HP a,const HP b,HP &c)
            {
                
            for(int i=1,j=0;i<=a.len;i++)
                {
                    c.s[i]
            =a.s[i]-j;
                    
            if(i<=b.len)
                        c.s[i]
            -=b.s[i];
                    
            if(c.s[i]<0)
                    {
                        j
            =1;
                        c.s[i]
            +=10;
                    }
                    
            else j=0;
                }
                c.len
            =a.len;
                
            while(c.len>=1&&!c.s[c.len])c.len--;
                
            if(!c.len)c.len=1;
            }
            void PrintHP(HP 
            &x)
            {
                
            for(int i=x.len;i>=1;i--)
                    printf(
            "%d",x.s[i]);
                
            }
            int main()
            {
                
            //freopen("1.out","w",stdout);
                
            int T,len,len2,i,j;
                char 
            *ptr;
                char oper;
                HP tmp,tmp2;
                scanf(
            "%d",&T);
                
            while(T--)
                {
                    len2
            =len=-1;
                    scanf(
            "%s",str);
                    
            for(ptr=x,i=j=0;str[i];i++)
                    {
                        
            if(str[i]>='0'&&str[i]<='9')
                            ptr[j++]=str[i];
                        
            else
                        {
                            oper
            =str[i];
                            ptr[j]
            ='\0';
                            j=0;
                            ptr
            =y;
                        }
                    }
                    ptr[j]
            ='\0';
                    StrHP(x,a);
                    StrHP(y,b);
                    switch(oper)
                    {
                    
            case '+':
                    case '-':

                        
            if(oper=='+')Plus(a,b,c);
                        else Substract(a,b,c);
                        
            len=max3(a.len,b.len+1,c.len);//帶個符號
                        len2
            =max(b.len+1,c.len);
                        
            for(i=0;i<len-a.len;i++)
                            putchar(
            ' ');
                        PrintHP(a);//不帶回車的print
                        putchar(
            '\n');
                        for(i=0;i<len-b.len-1;i++)
                            putchar(
            ' ');
                        putchar(oper);
                        PrintHP(b);
                        putchar(
            '\n');
                        for(i=0;i<len;i++)
                            i
            <len-len2?putchar(' '):putchar('-');
                        putchar('\n');
                        for(i=0;i<len-c.len;i++)
                            putchar(
            ' ');
                        PrintHP(c);
                        putchar(
            '\n');
                        break;

                    
            case '*':
                        Multi(a,b,c);
                        
            len=max3(a.len,b.len+1,c.len);
                        
                        
            for(i=0;i<len-a.len;i++)
                            putchar(
            ' ');
                        PrintHP(a);
                        putchar(
            '\n');
                        for(i=0;i<len-b.len-1;i++)
                            putchar(
            ' ');
                        putchar('*');
                        PrintHP(b);
                        putchar(
            '\n');
                        Int2HP(b.s[1],tmp);
                        Multi(a,tmp,tmp2);
                        len2
            =max(b.len+1,tmp2.len);
                        
            for(i=0;i<len;i++)
                            i
            <len-len2?putchar(' '):putchar('-');
                        putchar('\n');
                        for(i=0;i<len-tmp2.len;i++)
                            putchar(
            ' ');
                            PrintHP(tmp2);
                            putchar(
            '\n');
                            for(i=2;i<=b.len;i++)
                            {
                                Int2HP(b.s[i],tmp);
                                Multi(a,tmp,tmp2);
                                
            for(j=0;j<len-tmp2.len-i+1;j++)
                                    putchar(
            ' ');
                                PrintHP(tmp2);
                                putchar(
            '\n');
                            }
                        
            if(b.len>1)
                        {
                            len2
            =max(tmp.len+b.len-1,c.len);
                            
            for(i=0;i<len;i++)
                                i
            <len-len2?putchar(' '):putchar('-');
                            putchar('\n');
                            for(i=0;i<len-c.len;i++)
                                putchar(
            ' ');
                            PrintHP(c);
                            putchar(
            '\n');
                        }
                        
                        break;
                    }
                    putchar(
            '\n');
                }
                return 
            0;
            }
                
            posted on 2008-07-15 22:29 zoyi 閱讀(641) 評論(0)  編輯 收藏 引用 所屬分類: acm
            歡迎光臨 我的白菜菜園

            <2008年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            acmer

            online judge

            隊友

            技術

            朋友

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            狠狠色丁香婷婷久久综合五月| 狠狠88综合久久久久综合网| 精品国产青草久久久久福利| 国产69精品久久久久9999| 性做久久久久久久久老女人| 久久99久国产麻精品66| 国产精品久久自在自线观看| 国产91久久综合| 久久久久久国产精品美女| 九九久久99综合一区二区| 丁香久久婷婷国产午夜视频| 久久久久久久久66精品片| 99久久人妻无码精品系列蜜桃| 久久久WWW成人| 色8久久人人97超碰香蕉987| 久久九九免费高清视频| 久久er99热精品一区二区| 亚洲国产日韩欧美综合久久| 久久被窝电影亚洲爽爽爽| 久久久久久综合网天天| 久久男人中文字幕资源站| 97久久久精品综合88久久| 久久国产亚洲精品| 精品久久久久一区二区三区 | 久久精品国产亚洲AV久| 久久精品国产半推半就| 亚洲国产精品无码久久一线| 久久人人爽人人爽人人片AV东京热| 国产精品99久久免费观看| 亚洲欧美日韩中文久久| 久久99国产精品久久99小说| 久久精品国产亚洲7777| 国产叼嘿久久精品久久| 久久夜色tv网站| 99麻豆久久久国产精品免费| 久久成人国产精品| 国产精品久久久亚洲| 91久久精品视频| 久久综合九色综合久99| 97精品国产97久久久久久免费| 久久精品国产福利国产秒|