• <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
            一本久久a久久精品综合夜夜| 无码人妻久久一区二区三区蜜桃| 久久夜色精品国产噜噜亚洲AV| 2021久久国自产拍精品| 亚洲成色999久久网站| 午夜精品久久影院蜜桃| 国产精品免费看久久久| 国产精品亚洲综合专区片高清久久久| 亚洲Av无码国产情品久久| 99精品久久久久中文字幕| 91超碰碰碰碰久久久久久综合| 久久只有这里有精品4| 色综合久久精品中文字幕首页| 久久毛片一区二区| 久久精品国产亚洲av瑜伽| 亚洲人成网亚洲欧洲无码久久| 国产成人精品久久综合| 久久亚洲欧美国产精品| 免费精品久久天干天干| 美女久久久久久| 久久亚洲综合色一区二区三区| 亚洲国产另类久久久精品| 香蕉99久久国产综合精品宅男自 | 日韩亚洲国产综合久久久| 国产精品美女久久久久| yy6080久久| 亚洲伊人久久成综合人影院| 久久97久久97精品免视看秋霞| 99久久人妻无码精品系列| 77777亚洲午夜久久多喷| 久久天天躁狠狠躁夜夜躁2014| 久久人妻少妇嫩草AV蜜桃| 精品久久久久中文字| 99久久夜色精品国产网站| 亚洲国产精品人久久| 久久精品国内一区二区三区| 精品一区二区久久| 久久中文娱乐网| 狠狠精品久久久无码中文字幕 | 蜜桃麻豆www久久国产精品| 国内精品久久久久久久久电影网|