Õª Òª£º±¾ÎIJûÊöÁËÀûÓÃÊý×éʵÏÖ³¤ÕûÊýµÄËã·¨
¹Ø¼ü´Ê£º Êý×é Ëã·¨ VB
Abstract£ºUse array to realize the precise calculate of longteger
Key words£ºarray arithmetic VB
1¡¢Ç°ÑÔ
ÎÒÃǶ¼ÖªµÀ£¬ ¼ÆËã »úµÄÒ»¸ö×îÖØÒªµÄ¹¦ÄܾÍÊǽøÐÐ ¿ÆÑ§ ¼ÆËã¡£ÀûÓÃһЩ±ê×¼µÄÊýѧº¯ÊýºÍÔËËã·ûºÅ¿ÉÒÔ½øÐÐÈκθ´ÔÓµÄÊýѧÔËË㣬ÊýѧÔËËã¶Ô¼ÆËã»úÀ´Ëµµ±È»Ò²ÊÇÊ®·ÖÇáËɵÄÊÂÇé¡£µ«ÓÉÓÚ¼ÆËã»úÄÚ´æ¿Õ¼äµÄÏÞÖÆµÈÔÒò£¬¼ÆËã»úÔÚ¼ÆËãºÜ´óµÄÊý¾Ýʱ£¬ÍùÍùÊÇÓÿÆÑ§¼ÇÊý·¨±íʾ¡£±ÈÈçÔÚVB6.0ºÍÆäËûµÄһЩ¸ß¼¶±à³ÌÓïÑÔÖУ¬¼ÆËã»úËùÄÜ´¦ÀíµÄ³¤ÕûÊýµÄ·¶Î§ÊÇ´Ó-2,147,483,648 µ½ 2,147,483,647¡£Ò²¾ÍÊÇ˵³¬³öÕâ¸ö·¶Î§µÄÕûÊý¼ÆËã»ú¾Í²»ÄÜ´¦ÀíÉõÖÁ²»ÄÜʶ±ðÁË£¬ÄÇʱ¼ÆËã»ú¾Í»á°ÑÊý¾Ýת»»Îª¿ÆÑ§¼ÇÊý·¨ºóÔÙ½øÐд¦Àí£¬±ÈÈç1.398865E19£¬Ëü±íʾ1.398865³ËÒÔ10µÄ19´Î·½¡£
¼ÙÈçÎÒÃÇÐèÒªÖªµÀÁ½¸öºÜ´óµÄÕûÊýÏà³ËµÄ¾«È·½á¹ûÄØ£¿¿´ÆðÀ´ÊǺÜÄÑʵÏÖ£¬ÒòΪ¼ÆËã»ú²»Ö§³ÖºÜ³¤µÄλÊý¼ÆË㡣Ȼ¶ø£¬ÎÒÃÇÖ»ÒªÔ¸ÒâÈ¥×ö£¬ÄÃÒ»ÕÅÖ½ºÍÒ»Ö¦±ÊÒ»²½Ò»²½µØ½øÐÐÈ˹¤¼ÆË㣬×îºó×ÜÄܵõ½¾«È·½á¹û.ÎÒÃÇÄܲ»ÄܰÑÎÒÃÇÈ˹¤¼ÆËãµÄ ·½·¨ ¸æËß¼ÆËã»ú£¬ÈüÆËã»úÀ´Íê³ÉÕâЩ¼ÆË㹤×÷ÄØ£¿´ð°¸Êǿ϶¨µÄ¡£ÎÒÃÇ¿ÉÒÔÕÒ³öÒ»¸öËã·¨£¬ÈüÆËã»úÀ´Ä£ÄâÎÒÃÇÈ˹¤¼ÆËãµÄ·½Ê½½øÐмÆË㣬²¢ÇÒÒ²²»»á³¬³ö¼ÆËã»úµÄÕûÊý¼ÆË㷶Χ¡£±¾ÎľÍÊÇͨ¹ý¶ÔÈ˹¤¼ÆËã²½ÖèµÄ ·ÖÎö ºÍÄ£Ä⣬×îºóÕÒ³öÒ»¸öËã·¨£¬Óø߼¶ÓïÑÔʵÏÖ³¤ÕûÊýµÄ¾«È·¼ÆËã¡£
2¡¢È˹¤¼ÆËã²½ÖèµÄ·ÖÎöºÍÄ£Äâ
Ê×ÏÈÎÒÃÇÀ´·ÖÎöÒ»ÏÂÈ˹¤½øÐг˷¨¼ÆËãµÄ¹ý³Ì¡£ÀýÈ磺347¡Á78=27066
a 347
b ¡Á 78
c1 2776
c2 2429
c 27066
ΪÁ˱ãÓÚ˵Ã÷£¬ÎÒÃÇÓÃa±íʾ±»³ËÊý£¬ÓÃb±íʾ³ËÊý£¬ÓÃc±íʾ½á¹û¡£²¢ÇҰѸöλÊý¶¨Òå³ÉµÚһλ£¬Ê®Î»Êý¶¨Òå³ÉµÚ¶þ룬ÒÀ´ÎÀàÍÆ¡£
È˹¤¼ÆËã¹ý³ÌΪ£º
1. ÓÃbµÄµÚһλÒÀ´ÎÈ¥³ËaµÄ¸÷룬Öмä½á¹û·ÅÔÚc1ÖУ¬×îºóµÄc1ÒªÀÛ¼Ó½ø½á¹ûcÖУ¬¶øÇÒc1µÄµÚnλҪÀÛ¼Óµ½cµÄµÚnλ¡£
2. ÓÃbµÄµÚ¶þλÒÀ´ÎÈ¥³ËaµÄ¸÷룬Öмä½á¹û·ÅÔÚc2ÖУ¬×îºóµÄc2Ò²ÒªÀÛ¼Ó½ø½á¹ûcÖУ¬¶øÇÒc2µÄµÚnλҪÀÛ¼ÓÔÚcµÄµÚn+1λ¡£
3. ¼ÙÈçbµÄλÊýºÜ³¤µÄ»°£¬°´ÉÏÃæµÄ·½Ê½£¬ÓÃbµÄµÚmλÒÀ´ÎÈ¥³ËaµÄ¸÷룬Öмä½á¹û·ÅÔÚcmÖУ¬×îºóµÄcmÒªÀÛ¼Ó½ø½á¹ûcÖУ¬¶øÇÒcmµÄµÚnλҪÀÛ¼ÓÔÚcµÄµÚn+m-1ÖС£
4. °Ñc1¡¢c2¡¡cm ¶¼Àۼӳɽá¹ûc,×îºócµÄÖµ¾ÍÊÇa³ËbµÄ»ý¡£
ÕâÀïÓÐÒ»µãҪעÒ⣬µ±ÓÃbµÄµÚmλȥ³ËaÖеĵÚkλʱ£¬ÓпÉÄܲúÉú½øÎ»£¬ÕâʱµÄ½øÎ»ÒªÀÛ¼ÓÔÚcmµÄµÚk+1룬Ҳ¾ÍÊÇ×îºó½á¹ûcÖеÄn+m+kÖС£
3¡¢³ÌÐòËã·¨£º
ÏÖÔÚÎÒÃÇÀ´ ×ܽá È˹¤¼ÆËãµÄËã·¨£¬¸æËß¼ÆËã»úÔõô°´Õâ¸öË㷨ȥ¼ÆËã¡£
ǰÎÄÒѾÌá¹ý£¬Ì«³¤µÄÕûÊý¼ÆËã»ú²»ÄÜ´¦Àí£¬ËùÒÔÎÒÃÇÊ×ÏÈÒª½â¾öÊäÈëºÍÊä³öµÄ ÎÊÌâ ¡£ÎÒÃÇÖªµÀ£¬¼ÆËã»ú²»ÄÜ´¦ÀíºÜ³¤µÄÕûÊý£¬µ«ÄÜ´¦ÀíºÜ³¤µÄ×Ö·û´®¡£ËùÒÔÎÒÃǰÑÊäÈëºÍÊä³ö¶¼×ª»»³ÉÊý×ÖÐÍ×Ö·û´®À´´¦Àí¡£Í¬Ê±×Ö·û´®Ã»ÓÐÊý×Ö¼ÆËãµÄÄÜÁ¦£¬ËùÒÔÎÒÃÇ»¹Òª°Ñ×Ö·û´®·Ö²ð³ÉÒ»¸öÒ»¸öµÄÊý×Ö£¬ÕâÑù¼ÆËã»ú¾Í¼ÈÄܼÆË㣬ÓÖÄÜ´¦ÀíºÜ³¤µÄÊý¾ÝÁË¡£
ÎÒÃǶ¨ÒåÈý¸ö¿É±äÊý×éa(),b()ºÍc()£¬ÆäÖÐa()´æ·Å±»³ËÊýµÄÿһ룬×îµÍ루¸öλÊý£©·ÅÔÚa(1)ÖУ¬Í¬ÑùµØ£¬b()´æ·Å³ËÊýµÄÿһ룬c()´æ·Å½á¹û¡£
ÓÉÓÚc1¡¢c2¡¢Ò»Ö±µ½×îºóÒ»¸öÖмä½á¹û×îÖÕ¶¼ÒªÀÛ¼Ó½ø½á¹ûcÖУ¬ËùÒÔÎÒÃÇÔÚ³ÌÐòÖпÉÒÔÖ±½Ó°ÑÖмä½á¹ûcmÖ±½ÓÀÛ¼Óµ½½á¹ûc()ÖУ¬Êµ¼ÊÉÏc()ÖеÄÿһµ¥Ôª¶¼ÊÇÒ»¸öÀÛ¼ÓÆ÷£¬µ±Ò»¸öµ¥Ôªc(n)ÖеĽá¹û´óÓÚ9ʱ£¬ÎÒÃǰÑc(n)¶Ô10µÄÓàÊý·ÅÔÚc(n)ÖУ¬°Ñc(n)Õû³ý10µÄ½á¹ûÀÛ¼Ó½øc(n+1)ÖУ¬ÕâÑù¾ÍʵÏÖÁ˽øÎ»´¦Àí¡£
ÓóËÊýbµÄÿһλȥ³Ë±»³ËÊýaµÄ¸÷λʱ£¬ÎÒÃÇÉè¼ÆÒ»¸öÑ»·£¬ÒÀ´ÎÈ¡³öbµÄÿһλ¡£Ñ»·±äÁ¿ÉèΪI£¬I´Ó1µÝÔöµ½b1(×î¸ßλ)£¬²½³¤Îª1¡£
ÓÃbµÄÈκÎһλÊýmÈ¥³ËaµÄ¸÷λÊý£¬ÎÒÃÇÒ²Éè¼ÆÒ»¸öÑ»·£¬ÒÀ´ÎÈ¡³öaµÄ¸÷λ¡£Ñ»·±äÁ¿ÉèΪJ£¬J´Ó1µÝÔöµ½a1(×î¸ßλ)£¬²½³¤Îª1¡£ÕâÑùÀûÓÃÕâ¸öË«ÖØÑ»·¾Í¿ÉÒÔ¼ÆËãµ½aºÍbµÄÿһλ¡£°Ñ½á¹û¶¼ÀÛ¼Ó½øc()ÖеÄÏàӦλÖУ¬×îºó´Ó¸ßλµ½µÍλÖðλÊä³öÊý×éc¾ÍµÃµ½ÎÒÃÇËùÒªµÄ³¤ÕûÊý³Ë»ý¡£
Ô´³ÌÐòÈçÏ£º
Dim a(), b(), c() As Byte '¶¨ÒåÊäÈëºÍÊä³öÊý×é
Sub Main()
ts = "ÕûÊý³Ë·¨"
xx = InputBox("ÇëÊäÈë±»³ËÊý£º", ts)
If xx = "" The n End
yy = InputBox("ÇëÊäÈë³ËÊý", ts)
If yy = "" Then End
a1 = Len(xx) 'È¡xxµÄλÊý
b1 = Len(yy) 'È¡yyµÄλÊý
c1 = a1 + b1 'È·¶¨½á¹ûµÄ×î´óλÊý
ReDim a(a1), b(b1), c(c1) 'ÖØ¶¨ÒåÊý×é
For i = 1 To a
a(i) = Mid(xx, a1 - i + 1, 1) '¸øÊý×éaµÄÿһλ¸³Öµ
If Not IsNumeric(a(i)) Then '¼ì²éÊäÈëµÄºÏ·¨ÐÔ
MsgBox "±»³ËÊýÊäÈë´íÎó", , ts
End
End If
Next i
For i = 1 To b1
b(i) = Mid(yy, b1 - i + 1, 1) '¸øÊý×ébµÄÿһλ¸³Öµ
If Not IsNumeric(b(i)) Then '¼ì²éÊäÈëµÄºÏ·¨ÐÔ
MsgBox "³ËÊýÊäÈë´íÎó", , ts
End
End If
Next i
For i = 1 To c1 '½á¹ûÊý×éc³õʼ»¯
c(i) = 0
Next i
For i = 1 To b1 'È¡bÖеÄÿһλ
For j = 1 To a1 'È¡aÖеÄÿһλ
c(j + i - 1) = c(j + i - 1) + b(i) * a(j) 'Ïà³Ë½á¹ûÀÛ¼Óµ½cÖеÄÏàӦλ
zz = c(j + i - 1)
k = 0
Do While zz >= 10 'cÖеÄÿһλ½øÎ»¼ì²é
c(j + i + k - 1) = zz Mod 10 '±¾Î»´¦Àí
c(j + i + k) = c(j + i + k) + zz 10 '½øÎ»´¦Àí
zz = c(j + i + k)
k = k + 1
Loop
Next j
Next i
zz = ""
For k = c1 To 1 Step -1
If c(k) <> 0 Then Exit For 'È¥µô½á¹ûÖеÄǰµ¼0
Next k
k = IIf(k < 1, 1, k)
For i = k To 1 Step -1
zz = zz + Trim(Str(c(i)))
Next i
zz = xx + " X " + yy + " = " + zz
ts = "¼ÆËã½á¹û£º " + Str(a1) + "λ X " + Str(b1) + "λ ½á¹ûΪ" + Str(k) + "λ"
MsgBox zz, , ts 'ËãʽºÍ½á¹ûÊä³ö
End
End Sub
ÒÔÉϳÌÐòÔÚvb6.0ÉϱàÒëͨ¹ý£¬²¢ÇÒÄÜÕýÈ·¼ÆËã254λ³Ë254λµÄ³¤ÕûÊý£¬Êä³ö½á¹ûΪ508볤ÕûÊý£¬¾«È·µ½Ã¿Ò»Î»¡£
5¡¢½áÊøÓï
ÀíÂÛ ÉÏÕâ¸öËã·¨¿ÉÒÔ¼ÆËãÈÎÒâλÊýµÄÕûÊý³Ë·¨£¬±¾³ÌÐòΪÁË˵Ã÷Ëã·¨£¬Ö»Éè¼ÆÁËÒ»¸öÄ£¿é£¬Ã»ÓÐʹÓõ½´°Ì塣ʹÓõÄÊÇvbÖеıê×¼ÊäÈëÊä³öº¯Êý¡£ËùÒÔËüÄÜ´¦ÀíµÄ½á¹ûλÊýλ508룬ÒòΪ³¬¹ý254λµÄÊý¾Ý²»ÄÜÊäÈëÁË¡£ÒªÔö¼Ó´¦ÀíλÊý£¬Ö»ÐèÒªÔö¼ÓÒ»¸ö´°Ì壬°ÑÊäÈëºÍÊä³ö·ÅÔÚ´°ÌåÉϾͿÉÒÔÁË£¬Êµ¼ÊÉÏ»¹¿ÉÒÔÓöà¸ö×Ö·û´®Á¬½Ó£¬ÕâÑùÄܼÆËãµÄλÊý¾ÍûÓÐÏÞÖÆÁË£¬¶øÇÒµ±Ëù´¦ÀíµÄλÊý³¬¹ýÊý×éµÄ×î´ó¶¨Ò巶Χʱ»¹¿ÉÒÔÓöàάÊý×é¡£×ÜÖ®£¬Ö»Òª²ÉÓÃÒ»¶¨µÄ·½·¨£¬¿ÉÒÔ¼ÆËãÈÎÒⳤ¶ÈµÄÊý×Ö¡£
°Ñ±¾³ÌÐòÉÔ×öÐ޸ģ¬¿ÉÒÔ×ö³ÉÒ»¸ö×Ô¶¨Ò庯Êý£¬°ÑÁ½¸öÊäÈë²ÎÊý×÷Ϊº¯ÊýµÄ²ÎÊý£¬ÔÚÆäËûµØ·½µ÷Óñ¾º¯Êý¾Í¿ÉÒÔ¼ÆËãÈκÎÕûÊýµÄ½×³Ë£¨n!£©£¬Ò²¿ÉÒÔ¼ÆËãÈκÎÕûÊýµÄÕûÊý´Î·½(n^m)¡£
±¾Îĸø³öµÄËã·¨ÄܸøÎÒÃÇÒ»ÖÖ±à³Ì˼·£¬Ò²¸øÎÒÃÇÒ»ÖÖÆôʾ£¬¼´Ö»ÒªÎÒÃdzä·ÖÀûÓüÆËã»úµÄ¹¦ÄܺÍÌØÐÔ£¬ÓÐЩ¿´À´ÊDz»¿ÉÄÜʵÏֵļÆËã´¦Àí£¬Í¨¹ýÒ»¶¨µÄת»»£¬ÎÒÃÇ×ÜÄÜÕÒµ½½â¾öµÄ·½·¨¡£