• <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 閱讀(413) 評論(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
            无码任你躁久久久久久久| 国内精品久久九九国产精品| 青青草原综合久久大伊人| 国产成人精品久久亚洲| 欧美粉嫩小泬久久久久久久| 欧美日韩精品久久久免费观看| 伊人精品久久久久7777| 久久亚洲国产成人影院| 久久91精品国产91久久户| 香蕉99久久国产综合精品宅男自 | 青青草原1769久久免费播放| 久久精品亚洲日本波多野结衣 | 人妻系列无码专区久久五月天| 久久精品国产亚洲7777| 亚洲综合伊人久久大杳蕉| 久久久久四虎国产精品| 久久久无码精品亚洲日韩京东传媒 | 久久精品国内一区二区三区| 欧美麻豆久久久久久中文| 人妻少妇久久中文字幕 | 亚洲国产精品人久久| 久久精品国产免费观看| 久久99精品国产99久久6| 久久久久久亚洲Av无码精品专口| 日本亚洲色大成网站WWW久久 | 欧美与黑人午夜性猛交久久久| 中文字幕久久精品无码| 久久青青草原精品国产软件 | 久久精品国产色蜜蜜麻豆| av无码久久久久不卡免费网站| 久久精品中文无码资源站| 国产日产久久高清欧美一区| 亚洲国产精品久久电影欧美| 久久久久久午夜成人影院| 久久免费视频1| 欧美亚洲国产精品久久久久| 亚洲国产成人久久综合碰| 午夜福利91久久福利| 亚洲午夜精品久久久久久app| 亚洲国产视频久久| 久久久久女教师免费一区|