• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            大數(shù)運(yùn)算

            Posted on 2014-07-26 08:21 xLsDg 閱讀(406) 評論(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: 大數(shù)運(yùn)算  回復(fù)  更多評論   

            2014-07-26 15:45 by 云騰
            用long long類型的,基本上都能支持了。www.cppentry.com
            国内精品久久久久影院免费| 久久精品女人天堂AV麻| 亚洲狠狠综合久久| 久久无码人妻精品一区二区三区 | 久久久国产乱子伦精品作者| 国产成人久久激情91| 无码任你躁久久久久久| 久久99国产精品久久| 久久久久人妻一区精品| 青草国产精品久久久久久| 国内精品久久久久久麻豆| 久久丫精品国产亚洲av不卡| 99热都是精品久久久久久| 亚洲国产精品无码久久| 久久久精品波多野结衣| 国产午夜免费高清久久影院| 久久亚洲国产最新网站| 久久这里只精品国产99热| 国产Av激情久久无码天堂| 久久综合五月丁香久久激情| 久久精品国产亚洲av高清漫画 | 亚洲人成无码www久久久| 国产精品永久久久久久久久久| 久久天天躁夜夜躁狠狠躁2022| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲午夜无码久久久久小说| 久久精品无码一区二区三区| 午夜精品久久久久久99热| 亚洲人成无码网站久久99热国产| 国产精品99久久精品爆乳| 97久久超碰国产精品旧版| 亚洲中文久久精品无码| 中文字幕无码精品亚洲资源网久久| 久久久久久国产a免费观看不卡| 久久精品国产91久久综合麻豆自制| 久久久无码人妻精品无码| 久久偷看各类wc女厕嘘嘘| 久久久久久久久无码精品亚洲日韩| 亚洲精品无码久久一线| 久久丫精品国产亚洲av不卡| 久久亚洲AV成人无码国产|