• <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

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

            下面是為我找錯(cuò)誤提供方便的幾個(gè)地方:

            http://blog.csdn.net/tiaotiaoyly/archive/2008/02/11/2087975.aspx
            他總結(jié)得很好。。但是對我?guī)椭淮蟆!:呛恰!2贿^可以參考一下
            開始幾個(gè)錯(cuò)誤還是自己的數(shù)據(jù)測出來的。。
            我最致命的錯(cuò)誤是橫線的輸出
            橫線的長度其實(shí)取決于上下兩個(gè)數(shù)的長度的。。我一直以為是取決于最長數(shù)的長度

            以下是代碼。。剛好利用這個(gè)題熟悉了一下大數(shù)模板

            #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);//帶個(gè)符號
                        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 閱讀(637) 評論(0)  編輯 收藏 引用 所屬分類: acm
            歡迎光臨 我的白菜菜園

            <2008年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            acmer

            online judge

            隊(duì)友

            技術(shù)

            朋友

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久露脸国产精品| 成人国内精品久久久久影院VR| 亚洲欧美日韩精品久久亚洲区 | 国产精品久久久天天影视香蕉 | 久久无码人妻一区二区三区| 久久婷婷综合中文字幕| 午夜视频久久久久一区 | 亚洲欧美一级久久精品| 久久精品www人人爽人人| 久久国产影院| 国产精品久久久久影院色| 伊人久久五月天| 久久99精品国产99久久| 亚洲乱码中文字幕久久孕妇黑人| 99久久精品费精品国产| 久久综合狠狠综合久久综合88| 久久人妻少妇嫩草AV蜜桃| 久久综合九色综合精品| 99精品国产99久久久久久97| 久久精品无码一区二区三区免费| 久久国产色AV免费看| 亚洲中文久久精品无码| 久久婷婷五月综合色奶水99啪 | 久久久久久精品成人免费图片| 精品久久综合1区2区3区激情| 国产成人久久激情91| 久久精品亚洲AV久久久无码| 亚洲午夜精品久久久久久浪潮| 婷婷久久综合九色综合绿巨人| 国产L精品国产亚洲区久久| 国内精品人妻无码久久久影院 | 亚洲午夜无码久久久久| 国产香蕉久久精品综合网| 亚洲国产综合久久天堂 | 99久久婷婷国产综合精品草原| 91精品国产综合久久精品| 99久久99这里只有免费的精品| 久久久久一区二区三区| 一本一道久久精品综合| 精品久久久久久无码免费| 日本精品一区二区久久久|