有冇人知,點樣用java寫個program可以將超大integer計二次方再print出黎?

本帖最後由 gooddrive 於 2010-10-11 20:26 編輯

有冇人知,點樣用java寫個program可以將超大integer計二次方再print出黎?
唔比用biginteger
超大即係大過long兩倍左右(咩都裝唔落呢個超大integer)
thx!

查下linked list biginteger。

加減睇過C++嘅Sample code,唔算太難,乘除就真係好複雜,未諗過。

TOP

我只係地教到if else......
有冇易d方法可以係我呢個level做到?

TOP

將佢儲落條string 再調位~~~
00001
00029
上下將佢加埋再計進位~~~
請參考小學數學

TOP

除非你連個String Array index 都爆埋~~

TOP

5可以 以指數表示?

TOP

提供一下我既諗法

因為只係計二次方

Storage:
兩條 int array
one for pass in number, size = number's length
one for result, size = number's length * 2
如果想慳 memory, 可以試下 short / byte array

好過用 string, 本身 string 係 immutable, 計一計平方都要gc...

format:
digits in reverse order, (sign is ignored)
e.g.: "1234567890" become > [0,9,8,7,6,5,4,3,2,1]
咁做只係方便對位, 唔洗次次都要 nums.length - pos 之類既預處理
toString 時只要反轉就得

做完parsing 直計, 計法小學生都識

TOP

有冇人知,點樣用java寫個program可以將超大integer計二次方再print出黎?
唔比用biginteger
超大即係大過lon ...
gooddrive 發表於 2010-10-11 20:18



    講明唔比用 biginteger , 明顯份功課o既精神要你自己寫 arithmatic 啦.
    係咪 ??

TOP

tips:  A*2^64+B =>A0 *2^96+ A1 * 2^64 + B0 * 2^32 + B1
then do it by you hand

TOP

本帖最後由 lwk618 於 2010-10-13 03:04 編輯

6743^2=45468049
=>(6000+700+40+3)*(6000+700+40+3)
=>6000*6000+6000*700+6000*40+6000*3+
    700*6000  +700*700  +700*40 +700*3+
    40*6000   +40*700    +40*40   +40*3+
    3*6000    +3*700      +3*40     +3*3

=>36000000+4200000+240000+18000+
      4200000+  490000+ 28000+  2100+
        240000+   28000+   1600+    120+
          18000+    2100+     120+       9
=>
36
  42
    24
      18
  42
    49
      28
        21
    24
      28
        16
          12
       18
         21
           12
              9
=>
36
  42
  42
    24
    24
    49
      28
      18
      28
      18
        21
        16
        21
          12
          12
             9
=>444
        97
          92
            58
              24
                  9
從個位開始計
9
4
0
8
6
4
5
4
之後就從尾逐個print出來
從而得出45468049

邏輯就係將個number拆成一個個數字,然後每個數字自乘。
之後對返位置相加。

java code by yourself

TOP