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

            xLsDg

            Xiao Lu Software Development Group
            posts - 8, comments - 1, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            大數運算

            Posted on 2014-07-26 08:21 xLsDg 閱讀(405) 評論(1)  編輯 收藏 引用 所屬分類: 代碼庫
              1 #include <stdio.h>
              2 #include <stdlib.h>
              3 #include <string.h>
              4 
              5 #define MAX_BIT ( 255u )
              6 
              7 char* bignum_add( char *a, char *b, char *c )
              8 {
              9     char *pA = NULL, *pB = NULL, *pC = NULL, d = 0;
             10 
             11     if ( strlen( a ) > strlen( b ) ) {
             12         pA = a;
             13         pB = b;
             14 
             15     } else {
             16         pA = b;
             17         pB = a;
             18     }
             19 
             20     for ( pC = c; *pA; pA++, pB++, pC++ ) {
             21         if ( *pB ) {
             22             *pC = ( *pA - '0' ) + ( *pB - '0' ) + d;
             23 
             24         } else {
             25             *pC = ( *pA - '0' ) + d;
             26         }
             27 
             28         if ( 9 < *pC ) {
             29             d = *pC / 10;
             30             *pC %= 10;
             31 
             32         } else {
             33             d = 0;
             34         }
             35 
             36         *pC += '0';
             37     }
             38 
             39     if ( 0 < d ) {
             40         *pC = d + '0';
             41     }
             42 
             43     return c;
             44 }
             45 
             46 char* bignum_sub( char *a, char *b, char *c )
             47 {
             48     char *pA = NULL, *pB = NULL, *pC = NULL, d = 0, flag = 0;
             49 
             50     if ( strlen( a ) >= strlen( b ) ) {
             51         pA = a;
             52         pB = b;
             53         flag = 1;
             54 
             55     } else {
             56         pA = b;
             57         pB = a;
             58         flag = -1;
             59     }
             60 
             61     for ( pC = c; *pA; pA++, pB++, pC++ ) {
             62         *pC = ( *pA - '0' ) + d;
             63 
             64         if ( *pB ) {
             65             *pC = *pC - ( *pB - '0' );
             66         }
             67 
             68         if ( 0 > *pC ) {
             69             if ( *( pA + 1 ) ) {
             70                 d = -1;
             71                 *pC += 10;
             72 
             73             } else {
             74                 *pC = -*pC;
             75                 flag = -1;
             76             }
             77 
             78         } else {
             79             d = 0;
             80         }
             81 
             82         *pC += '0';
             83     }
             84 
             85     if ( 0 > flag ) {
             86         *pC = '-';
             87     }
             88 
             89     return c;
             90 }
             91 
             92 char* bignum_mul( char *a, char *b, char *c )
             93 {
             94     char *pA = a, *pB = b, *pC = c, d = 0;
             95 
             96     for ( pB = b; *pB; pB++ ) {
             97         for ( pA = a, pC = c + ( pB - b ), d = 0; *pA; pA++, pC++ ) {
             98             if ( *pC ) {
             99                 *pC = ( *pC - '0' ) + ( *pA - '0' ) * ( *pB - '0' ) + d;
            100 
            101             } else {
            102                 *pC = ( *pA - '0' ) * ( *pB - '0' ) + d;
            103             }
            104 
            105             if ( 9 < *pC ) {
            106                 d = *pC / 10;
            107                 *pC %= 10;
            108 
            109             } else {
            110                 d = 0;
            111             }
            112 
            113             *pC += '0';
            114         }
            115 
            116         if ( 0 < d ) {
            117             *pC = d + '0';
            118         }
            119     }
            120 
            121     return c;
            122 }
            123 
            124 char* bignum_reverse( char *a )
            125 {
            126     char *p1 = a, *p2 = NULL;
            127 
            128     for ( p2 = a + strlen( a ) - 1; p1 < p2; p1++, p2-- ) {
            129         *p1 ^= *p2;
            130         *p2 ^= *p1;
            131         *p1 ^= *p2;
            132     }
            133 
            134     return a;
            135 }
            136 
            137 int main()
            138 {
            139     char *pA = NULL, *pB = NULL, *pC = NULL;
            140 
            141     pA = ( char* )malloc( MAX_BIT * sizeofchar ) );
            142     pB = ( char* )malloc( MAX_BIT * sizeofchar ) );
            143     pC = ( char* )malloc( MAX_BIT * sizeofchar ) * 2 );
            144 
            145     memset( pA, 0, MAX_BIT * sizeofchar ) );
            146     printf( "A=" ); scanf( "%s", pA );
            147     pA = bignum_reverse( pA );
            148 
            149     memset( pB, 0, MAX_BIT * sizeofchar ) );
            150     printf( "B=" ); scanf( "%s", pB );
            151     pB = bignum_reverse( pB );
            152 
            153     memset( pC, 0, MAX_BIT * sizeofchar ) * 2 );
            154     printf( "--------------------------------\n" );
            155     pC = bignum_add( pA, pB, pC );
            156 
            157     pC = bignum_reverse( pC );
            158     printf( "A+B=%s\n", pC );
            159 
            160     memset( pC, 0, MAX_BIT * sizeofchar ) * 2 );
            161     printf( "--------------------------------\n" );
            162     pC = bignum_sub( pA, pB, pC );
            163 
            164     pC = bignum_reverse( pC );
            165     printf( "A-B=%s\n", pC );
            166 
            167     memset( pC, 0, MAX_BIT * sizeofchar ) * 2 );
            168     printf( "--------------------------------\n" );
            169     pC = bignum_mul( pA, pB, pC );
            170 
            171     pC = bignum_reverse( pC );
            172     printf( "A*B=%s\n", pC );
            173 
            174     return 0;
            175 }
            176 

            Feedback

            # re: 大數運算  回復  更多評論   

            2014-07-26 15:45 by 云騰
            用long long類型的,基本上都能支持了。www.cppentry.com
            亚洲午夜久久久久久噜噜噜| 久久91精品国产91久| 91久久精一区二区三区大全| 久久av无码专区亚洲av桃花岛| 色婷婷综合久久久久中文一区二区 | 99久久这里只精品国产免费| 国产成人精品久久一区二区三区av| 77777亚洲午夜久久多喷| 99久久人妻无码精品系列| 91精品久久久久久无码| 91久久精品电影| 久久久久精品国产亚洲AV无码 | 久久亚洲精品国产精品婷婷| 久久婷婷国产麻豆91天堂| 久久人人爽人人爽人人av东京热| 久久精品国产只有精品2020| 久久亚洲精品成人AV| 久久天天躁狠狠躁夜夜avapp| 伊人久久大香线蕉成人| 久久精品人人做人人爽电影| 天堂久久天堂AV色综合| 久久天天躁狠狠躁夜夜躁2O2O| 久久精品国产亚洲Aⅴ香蕉| 精品国产乱码久久久久软件| 一级做a爰片久久毛片人呢| 亚洲愉拍99热成人精品热久久| 久久综合五月丁香久久激情| 成人免费网站久久久| 久久国产高潮流白浆免费观看| 久久久久国产亚洲AV麻豆| 色综合久久综合网观看| 精品久久人妻av中文字幕| 久久妇女高潮几次MBA| 日日狠狠久久偷偷色综合免费 | 国产亚洲精午夜久久久久久| 久久国产免费直播| 久久久精品视频免费观看| 国产激情久久久久影院老熟女| 国内精品人妻无码久久久影院 | 久久精品国产亚洲AV麻豆网站| 中文字幕亚洲综合久久菠萝蜜|