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

            朋友

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久露脸国产精品| 日韩人妻无码精品久久久不卡| 国产精品午夜久久| 2021国内久久精品| 久久99国产精品久久99| 国内精品久久久久影院亚洲| 狠狠色丁香久久婷婷综合五月| 99久久婷婷国产一区二区| 久久人妻无码中文字幕| 99久久精品免费看国产免费| 日韩精品久久久肉伦网站| 久久久久久国产精品无码下载| 麻豆一区二区99久久久久| 久久久久亚洲精品中文字幕| 国产精品美女久久久久久2018| 亚洲国产精品狼友中文久久久 | 精品精品国产自在久久高清| 久久亚洲国产精品123区| 久久国产精品久久国产精品| 亚洲精品高清国产一线久久| 久久久久久无码国产精品中文字幕| 国产精品女同久久久久电影院| 国产精品中文久久久久久久| 久久久久一本毛久久久| 99久久国产综合精品五月天喷水 | 久久久久亚洲av无码专区喷水| 欧美精品丝袜久久久中文字幕 | 亚洲精品无码久久久久AV麻豆| 精品久久香蕉国产线看观看亚洲| 囯产极品美女高潮无套久久久| 久久午夜综合久久| 久久久久久久久久免免费精品| 久久综合丁香激情久久| 久久精品国产精品国产精品污| 久久偷看各类wc女厕嘘嘘| 精品综合久久久久久97| 久久无码专区国产精品发布| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 99久久er这里只有精品18| 久久99国内精品自在现线| avtt天堂网久久精品|