青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

A X B 高精度乘法,分治(二分)加速——算法作業 2.2,EOJ 1070

Time Limit:1000MS Memory Limit:30000KB

Description

旺財的數學老師開始發威了,留了一道很大很大的整數之間乘法的問題。

Input

第1行有一個正整數N(0 < N < 11),表示有幾組測試數據,接下來的2……N+1行里,每行有兩個無正負號非負整數(都在500位以內),整數之間用一個空格
分開.

Output

輸出每行非負整數的積,每個結果占一行。

Sample Input

3
1 1
100 200
12345678901234567890 1

Sample Output

1
20000
12345678901234567890


樸素的高精度乘法

 1#include <stdio.h>
 2#include <string.h>
 3 
 4#define  L  1009
 5 
 6int a[ L ], b[ L ], c[ L ];
 7 
 8void input( int a[] ) {
 9        char s[ L ];
10        int len, i;
11        scanf( "%s", s );
12        len = strlen( s );
13        memset( a, 0sizeof(int)*L );
14        a[ 0 ] = len;
15        for ( i = 0; i < len; ++i ) {
16                a[ len - i ] = (int)(s[ i ] - '0');
17        }

18}

19 
20void mul( int c[], int a[], int b[] ) {
21        int la = a[ 0 ], lb = b[ 0 ], i, j;
22        memset( c, 0sizeof(int)*L );
23        for ( i = 1; i <= la; ++i ) {
24                for ( j = 1; j <= lb; ++j ) {
25                        c[ i + j - 1 ] += a[ i ] * b[ j ];
26                        c[ i + j ]     += c[ i + j - 1 ] / 10;
27                        c[ i + j - 1 ] %= 10;
28                }

29        }

30        c[ 0 ] = la + lb;
31        while ( (c[0]>1&& (c[c[0]]==0) ) {
32                --c[ 0 ];
33        }

34}

35 
36void output( int a[] ) {
37        int i;
38        for ( i = a[ 0 ]; i >= 1--i ) {
39                printf( "%d", a[ i ] );
40        }

41        printf( "\n" );
42}

43 
44int main() {
45        int td;
46        scanf( "%d"&td );
47        while ( td-- > 0 ) {
48                input( a );
49                input( b );
50                mul( c, a, b );
51                output( c );
52        }

53        return 0;
54}

55


使用二分加速的高精度乘法

  1#include <iostream>
  2#include <cstdio>
  3#include <cstring>
  4 
  5using namespace std;
  6 
  7#define  L    1002
  8#define  LIM  500
  9 
 10typedef  int  BI[ L ];
 11BI buf[ LIM ];
 12int top;
 13 
 14#define  bi_copy(a,b) memcpy( (void*)(a), (void*)(b), sizeof(int)*L )
 15 
 16void bi_out( int a[] ) {
 17        char s[ L ];
 18        int i;
 19        for ( i = 0; i < a[0]; ++i ) {
 20                s[ i ] = a[ a[0- i ] + '0';
 21        }

 22        s[ a[0] ] = 0;
 23        puts( s );
 24}

 25 
 26void bi_in( int a[] ) {
 27        int len, i;
 28        char s[ L ];
 29        scanf( "%s", s );
 30        len = strlen( s );
 31        a[ 0 ] = len;
 32        for ( i = 0; i < len; ++i ) {
 33                a[ len - i ] = s[ i ] - '0';
 34        }

 35}

 36 
 37void bi_add( int c[], int a[], int b[] ) {
 38        int i, g = 0;
 39        for ( i = 1; (i<=a[0])&&(i<=b[0]); ++i ) {
 40                g += a[ i ] + b[ i ];
 41                c[ i ] = g % 10;
 42                g /= 10;
 43        }

 44        while ( i <= a[0] ) {
 45                g += a[ i ];
 46                c[ i ] = g % 10;
 47                g /= 10;
 48                ++i;
 49        }

 50        while ( i <= b[ 0 ] ) {
 51                g += b[ i ];
 52                c[ i ] = g % 10;
 53                g /= 10;
 54                ++i;
 55        }

 56        while ( g > 0 ) {
 57                c[ i ] = g % 10;
 58                g /= 10;
 59                ++i;
 60        }

 61        c[ 0 ] = i - 1;
 62}

 63 
 64void bi_shiftL( int a[], int n ) {
 65        int i;
 66        if ( n <= 0 ) {
 67                return;
 68        }

 69        for ( i = a[0]; i >= 1--i ) {
 70                a[ i+n ] = a[ i ];
 71        }

 72        for ( i = 1; i <= n; ++i ) {
 73                a[ i ] = 0;
 74        }

 75        a[ 0 ] += n;
 76}

 77 
 78// c[0] >= 2
 79void bi_half( int a[], int b[], int c[] ) {
 80        int i;
 81        b[ 0 ] = ( c[ 0 ] >> 1 );
 82        for ( i = b[ 0 ]; i >= 1--i ) {
 83                b[ i ] = c[ i ];
 84        }

 85        a[ 0 ] = c[ 0 ] - b[ 0 ];
 86        for ( i = a[ 0 ]; i >= 1--i ) {
 87                a[ i ] = c[ b[ 0 ] + i ];
 88        }

 89}

 90 
 91void bi_mul( int c[], int a[], int b[] ) {
 92#define  ADD(x)  BI &x = buf[ top++ ]
 93#define  ENTER  ADD(w); ADD(x); ADD(y); ADD(z); ADD(r); ADD(s); ADD(t)
 94#define  LEAVE  top -= 7; return
 95#define  MULONE( a, b ) { \
 96                int i, x = a[ 1 ], g = 0; \
 97                for ( i = 1; i <= b[ 0 ]; ++i ) { \
 98                        g += b[ i ] * x; \
 99                        c[ i ] = g % 10; \
100                        g /= 10; \
101                }
 \
102                while ( g > 0 ) { \
103                        c[ i++ ] = g % 10; \
104                        g /= 10; \
105                }
 \
106                --i; \
107                while ( (i>1&& (c[i]==0) ) { \
108                        --i; \
109                }
 \
110                c[ 0 ] = i; \
111        }

112 
113        if ( (a[0]<1|| (b[0]<1) ) {
114                return;
115        }

116 
117        ENTER;
118 
119        // for debug
120        if ( top >= LIM ) {
121                fprintf( stderr, "buf overflow" );
122                LEAVE;
123        }

124 
125        if ( a[ 0 ] == 1 ) {
126                MULONE( a, b );
127                LEAVE;
128        }

129        if ( b[ 0 ] == 1 ) {
130                MULONE( b, a );
131                LEAVE;
132        }

133        bi_half( w, x, a );
134        bi_half( y, z, b );
135        bi_mul( r, w, y );
136        bi_shiftL( r, (a[0]>>1+ (b[0]>>1) );
137        bi_mul( s, z, w );
138        bi_shiftL( s, (a[0]>>1) );
139        bi_add( t, r, s );
140        bi_mul( r, x, y );
141        bi_shiftL( r, (b[0]>>1) );
142        bi_mul( s, x, z );
143        bi_add( c, t, r );
144        bi_add( t, c, s );
145        bi_copy( c, t );
146        LEAVE;
147 
148#undef ADD
149#undef ENTER
150#undef LEAVE
151#undef MULONE
152}
153 
154int main() {
155        int td, a[ L ], b[ L ], c[ L ];
156        scanf( "%d"&td );
157        while ( td-- > 0 ) {
158                top = 0;
159                bi_in( a );
160                bi_in( b );
161                bi_mul( c, a, b );
162                bi_out( c );
163        }

164        return 0;
165}

166



我的二分實現太挫了,加之這題數據規模太小,二分加速的反而慢一些,o(╯□╰)o 

posted on 2011-03-28 19:41 coreBugZJ 閱讀(813) 評論(0)  編輯 收藏 引用 所屬分類: 課內作業

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品视频在线| 一区二区三区视频免费在线观看| 激情六月婷婷综合| 国产一区二区三区四区在线观看| 国产精品一区视频| 国产综合网站| 亚洲日韩视频| 亚洲女人天堂成人av在线| 欧美一级黄色网| 免费欧美高清视频| 日韩午夜黄色| 午夜亚洲性色福利视频| 久久久久久精| 欧美日韩另类国产亚洲欧美一级| 国产精品久久久久久久9999| 国产一区日韩一区| 亚洲欧洲一区二区三区久久| 亚洲影视九九影院在线观看| 玖玖视频精品| 日韩手机在线导航| 欧美一区二区在线观看| 欧美福利专区| 国产三级精品在线不卡| 亚洲精品小视频在线观看| 午夜国产精品视频免费体验区| 老司机午夜精品视频| 亚洲精品中文字幕女同| 欧美在线视频免费播放| 欧美日韩午夜在线| 在线观看视频欧美| 亚洲专区免费| 欧美国产精品一区| 午夜精彩视频在线观看不卡| 欧美久久久久久久久| 激情综合网址| 欧美亚洲一区二区三区| 亚洲日本久久| 久久久国产精品一区二区三区| 欧美日韩中字| 亚洲欧洲日本国产| 卡通动漫国产精品| 午夜精品在线观看| 国产精品国产三级国产aⅴ9色| 亚洲国产精品精华液网站| 欧美在线视频一区| 亚洲一区二区三区高清不卡| 欧美日韩成人一区二区三区| 亚洲国产欧美在线人成| 久久综合久久综合久久综合| 亚洲国产视频直播| 国产主播精品| 欧美在线三级| 亚洲一区欧美二区| 欧美日本免费| 一区二区毛片| 亚洲日本成人网| 欧美精品成人在线| 亚洲人久久久| 亚洲国产精品精华液2区45| 久久久久久久性| 永久91嫩草亚洲精品人人| 久久久综合激的五月天| 久久精品国产欧美激情| 激情国产一区二区| 免费日韩av电影| 欧美91福利在线观看| 亚洲精品日产精品乱码不卡| 亚洲国产精品久久精品怡红院| 男人的天堂成人在线| 在线看国产一区| 亚洲国产成人久久综合| 欧美精品日韩三级| 亚洲女同性videos| 欧美一区二区三区免费观看视频| 国产伊人精品| 欧美激情在线狂野欧美精品| 欧美福利一区| 99re6热只有精品免费观看 | 免费在线日韩av| 免费精品视频| 亚洲一区二区免费在线| 亚洲永久视频| 1024亚洲| 亚洲精品乱码久久久久| 国产精品久久久久毛片软件 | 国产自产精品| 亚洲国产高清自拍| 国产精品嫩草影院一区二区| 久久九九免费| 欧美激情一区二区三区成人| 亚洲一区在线免费观看| 欧美一区二区三区成人| 亚洲人久久久| 午夜精品久久久久久久久久久久久| 黑人巨大精品欧美黑白配亚洲| 欧美粗暴jizz性欧美20| 欧美日韩视频不卡| 免费在线成人av| 国产精品v欧美精品v日韩| 久久久99免费视频| 欧美日韩国产精品 | 99视频在线观看一区三区| 国产精品午夜视频| 亚洲第一视频网站| 国产日本欧美视频| 亚洲日本在线视频观看| 国产婷婷成人久久av免费高清| 在线观看欧美| 亚洲欧美日韩国产成人| 麻豆国产精品一区二区三区 | 欧美激情一区二区三区在线视频观看| 亚洲一区二区三区四区中文| 毛片基地黄久久久久久天堂| 久久精品av麻豆的观看方式| 欧美人与禽性xxxxx杂性| 久久精品国产亚洲精品| 欧美图区在线视频| 亚洲国产一区视频| 一区在线观看| 欧美在线亚洲在线| 欧美一区二区三区另类| 欧美日韩一二三四五区| 亚洲高清av在线| 亚洲欧洲精品一区| 鲁大师影院一区二区三区| 久久精品盗摄| 国产偷自视频区视频一区二区| 国产精品99久久久久久宅男| 一本色道久久综合狠狠躁的推荐| 欧美成人精品福利| 亚洲第一中文字幕在线观看| 亚洲成色777777女色窝| 久久久午夜精品| 麻豆精品在线视频| 在线观看亚洲视频| 久久久噜噜噜久久久| 久久视频在线视频| 国产在线精品自拍| 久久精品最新地址| 美日韩在线观看| 在线观看不卡av| 蜜桃久久av一区| 亚洲人体1000| 亚洲香蕉成视频在线观看| 欧美午夜国产| 亚洲欧美春色| 免播放器亚洲一区| 亚洲人成久久| 欧美日韩一区二区三区在线视频| 日韩香蕉视频| 欧美一区二区三区四区在线| 国内成+人亚洲+欧美+综合在线| 久久久青草青青国产亚洲免观| 欧美成人一区二区三区在线观看| 亚洲精选视频在线| 国产精品蜜臀在线观看| 欧美一区二区三区免费观看视频| 免费不卡在线观看av| 亚洲人成在线观看一区二区| 欧美日韩亚洲一区二区三区| 午夜久久资源| 亚洲高清不卡在线| 香蕉亚洲视频| 亚洲激情第一页| 欧美视频官网| 久久国产福利| 日韩视频在线观看免费| 久久国内精品视频| 亚洲精品日韩在线观看| 国产精品午夜春色av| 你懂的视频欧美| 亚洲一区精彩视频| 欧美成人午夜| 午夜在线成人av| 亚洲精品在线电影| 免费不卡中文字幕视频| 亚洲尤物视频网| 激情文学综合丁香| 欧美日韩精品免费观看| 久久高清免费观看| 一区二区国产在线观看| 免费成人高清| 久久xxxx| 亚洲性图久久| 亚洲国产天堂久久综合网| 国产精品影音先锋| 欧美精品一区二区视频| 性色一区二区| 亚洲视频在线播放| 91久久黄色| 欧美国产精品久久| 久久精品最新地址| 欧美一区二区三区免费视频| 一本色道久久综合亚洲二区三区| 影音先锋中文字幕一区| 国产噜噜噜噜噜久久久久久久久| 欧美日韩国产首页在线观看| 欧美18av| 欧美二区不卡| 欧美成人一区二区三区|