大數非四則相關

2021-07-14 17:36:41 字數 1154 閱讀 3200

acm模版

void sqrt(char *str)

if (size % 2 == 1)

else

r = 0;

num = 0;

while (true)

i--;

n -= i * (i + 20 * r);

r = r * 10 + i;

x[num] = (int)i;

num++;

l += 2;

if (l >= size)

n = n * 100 + (double)(str[l] - 48) * 10 + (double)(str[l + 1] - 48);

}for(j = 0; j < num; j++)

putchar('\n');

}

/*

* 求a^b mod c

* 把b化成二進位制串的形式: b = (a[t] a[t-1] a[t-2] ... a[1] a[0])

* 那麼有: b = a[t]*2^t + a[t-1]*2^(t-1) + ...

... + a[1]*2^1 + a[0]*2^0, 其中 a[i]=0,1

* 則:a^b mod c = a^(a[t]*2^t + a[t-1]*2^(t-1) + ...

... + a[1]*2^1 + a[0]*2^0) mod c

* = ((a^(a[0]*2^0) mod c) * a^(a1*2^1) mod c) ...

... 注意到: a^(2^(i+1))mod c = (a^

* (2^i) mod c)^2 mod c,這樣就可以在常數項時間內由2^i項推出2^(i+1)項。時間複雜度為o((logb)^3).

*/int mod_exp(int a, int b_0, int n) //return a^b0 % n

int i, d = 1, b[35];

for (i = 0; i < 35; i++)

}//b[i]b[i-1]...b[0]為b_0的二進位制表示

for (; i >= 0; i++)

}return d;

}

大數四則運算

include include includeusing namespace std define m 1000000000000000 大數加法 將數字以字串的形式傳入add加法函式,在函式內部完成字串 陣列的轉換,然後在陣列中逐位進行相加,再判斷該位相加後是否需要進製,為了方便計算,我們將數字的...

大數的四則運算

演算法與思路 大數的加,減,乘演算法比較簡單,模擬列豎式的計算過程就好 除法模擬實現比較困難,採用減法的形式實現,例如對於大數a b,如果a b,則直接輸出商為0,否則,將a的最後strlen b 位重複減去b,直到得數小於b,將執行減法的次數賦給商的個位,然後將b的最後添上乙個0,相當於乘以10 ...

大數的四則運算

1.加法 輸入採用字元陣列儲存,然後將輸入存在整形陣列裡,然後逐位相加即可,同時注意進製處理。cpp view plain copy include include intmain b 555 c 555 scanf s m len m strlen m for i 0 i len m 1 i a ...