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

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>
            激情久久久久久| 亚洲天堂网在线观看| 亚洲三级电影在线观看| 国产精品系列在线播放| 欧美三级视频在线| 欧美日韩精品不卡| 欧美激情第六页| 欧美激情第10页| 欧美国产日韩一区二区三区| 91久久久久久| 亚洲精品中文字| 一区二区三区视频在线观看| 女主播福利一区| 亚洲人成在线播放网站岛国| 亚洲国内自拍| 久久久av毛片精品| 欧美日韩国产123| 欧美日韩1区2区| 欧美精品性视频| 欧美成人有码| 奶水喷射视频一区| 免费视频一区| 欧美日韩国产首页| 久久精品色图| 欧美有码在线视频| 亚洲一级片在线观看| 亚洲美女网站| 欧美一区二区三区免费视频| 久久高清一区| 欧美电影美腿模特1979在线看| 亚洲欧美日韩国产精品| 免费欧美在线视频| 亚洲福利国产| 欧美一区激情视频在线观看| 另类图片国产| 欧美国产精品中文字幕| 欧美 亚欧 日韩视频在线| 亚洲一卡久久| 欧美亚一区二区| 亚洲国产小视频| 亚洲综合好骚| 久久久久久婷| 久久久久久久久蜜桃| 久久久女女女女999久久| 亚洲精品一区二区在线观看| 99国产精品99久久久久久| 欧美成人午夜激情在线| 91久久精品一区| 亚洲精品在线免费| 欧美性猛交一区二区三区精品| 最新高清无码专区| 亚洲精品自在在线观看| 欧美高清免费| 亚洲一级影院| 久久久精品一区二区三区| 亚洲国产一区二区三区青草影视| 久久久久9999亚洲精品| 欧美不卡高清| 欧美三级在线视频| 亚洲专区一区| 亚洲欧洲日韩女同| 欧美主播一区二区三区美女 久久精品人 | 欧美一区二区精品| 亚洲免费av观看| 国产精品九九| 久久久久久久网| 久久精品国产亚洲精品| 国产精品爽黄69| 亚洲精品美女久久久久| 久久激情婷婷| 亚洲欧美中文日韩在线| 欧美一区二区私人影院日本| 欧美日韩在线观看一区二区三区 | 亚洲一区在线播放| 国产欧美日韩视频一区二区三区| 一区二区福利| 亚洲国产精品v| 欧美午夜激情在线| 欧美69wwwcom| 欧美日韩色综合| 亚洲国内精品| 韩国女主播一区| 久久国产精品久久w女人spa| 亚洲网站视频| 欧美日韩亚洲免费| 亚洲精品日韩久久| 91久久线看在观草草青青| 久久久www成人免费无遮挡大片| 久久综合国产精品| 欧美福利电影在线观看| 国产尤物精品| 99成人精品| 日韩一区二区精品葵司在线| 亚洲欧美日韩精品在线| 狠狠色伊人亚洲综合网站色| 国产偷国产偷精品高清尤物| 欧美gay视频| 亚洲欧美在线播放| 亚洲国产精品成人综合色在线婷婷| 欧美精品日韩| 久久精品99国产精品| 亚洲一区不卡| 欧美成人免费在线视频| 久久人人爽人人| 久久裸体艺术| 午夜久久久久| 亚洲视频999| 国产日韩欧美麻豆| 欧美一区激情| 亚洲高清av在线| 亚洲综合色激情五月| 国产主播在线一区| 欧美风情在线观看| 性伦欧美刺激片在线观看| 久久综合影音| 欧美亚洲网站| 99热精品在线| 国产日韩欧美不卡| 欧美激情国产精品| 亚洲欧美第一页| 亚洲激情欧美| 欧美激情在线免费观看| 久久综合久久美利坚合众国| 欧美一区二视频| 久久天天躁狠狠躁夜夜爽蜜月| 性娇小13――14欧美| 欧美国产精品久久| 在线欧美一区| 国产日韩欧美视频在线| 欧美韩日高清| 欧美一区二区久久久| 一级日韩一区在线观看| 欧美专区中文字幕| 新67194成人永久网站| 久久精品中文字幕一区二区三区| 美腿丝袜亚洲色图| 99在线精品视频在线观看| 中文精品视频| 欧美日韩岛国| 国产偷自视频区视频一区二区| 国产一区在线播放| 欧美一区二区在线观看| 欧美成人高清视频| 欧美一区二区在线观看| 亚洲午夜极品| 久久国产精品电影| 久久视频这里只有精品| 久久久久青草大香线综合精品| 久久不射电影网| 亚洲欧美激情在线视频| 亚洲精品偷拍| 久久人人97超碰国产公开结果| 国产精品高潮粉嫩av| 国产一区欧美日韩| 91久久久精品| 日韩网站在线看片你懂的| 在线观看一区二区精品视频| 99成人在线| 欧美中在线观看| 久久国产欧美精品| 亚洲国产日韩欧美一区二区三区| 欧美高清视频免费观看| 99re6这里只有精品| 亚洲网址在线| 亚洲美女免费精品视频在线观看| 国产精品电影网站| 日韩亚洲一区二区| 亚洲日本免费电影| 免费在线国产精品| 亚洲最新视频在线播放| 久久一区二区三区国产精品| 欧美日韩亚洲高清一区二区| 久久成人18免费网站| 红桃视频一区| 一区二区三区高清| 亚洲精品韩国| 久久成人国产| 亚洲国产你懂的| 久久亚洲综合网| 亚洲精品裸体| 欧美激情亚洲| 在线日韩电影| 久久亚洲综合色| 欧美日产一区二区三区在线观看| 亚洲人成网站999久久久综合| 欧美伊人久久久久久久久影院| 欧美gay视频激情| 欧美一区二区日韩| 久久不见久久见免费视频1| 欧美福利视频在线| 欧美va天堂| 亚洲人成小说网站色在线| 久久手机免费观看| 亚洲国产一区二区三区高清| 国产精品入口日韩视频大尺度| 亚洲国产婷婷香蕉久久久久久| 午夜一区二区三区不卡视频| 亚洲精品久久嫩草网站秘色| 久久电影一区| 免费高清在线一区|