大數冪運算

2021-05-09 12:47:40 字數 4371 閱讀 6712

大數冪運算 源於poj1001題目:http://acm.pku.edu.cn/judgeonline/problem?id=1001

mul_singleint(const

string&s1

,int n);

2. 迴圈利用大整數加法計算大整數乘積 string

mul_int(const

string&s1

,const

string

&s2);

3. 迴圈利用大整數乘積得到大數冪string

exponentiation(const

string&s1

,int

exp); 其中如果底數是浮點數,先去掉小數點,最後補上。

舉例:  2.0100^3

計算2.0100×2.0100×2.0100

2.0100×2.0100 = 2.01×2.01 = 201×201×10^(-4)

201*201 = 201*1 + 201*0*10 + 201*1*(10^2)

**實現:
#include 

#include

#include

using

std::

string;

using

std::

cout;

using

std::

cin;

using

std::

max;

using

std::

endl;

using

std::

getline;

string

add(

const

string&s1

,const

string

&s2);

string

mul_singleint(

const

string&s1

,int n);

string

mul_int(

const

string&s1

,const

string

&s2);

intcalpointnum(

const

string&s1

,const

string

&s2);

void

removezero(

string

& s);

void

removedot(

string

& s);

string

exponentiation(

const

string&s1

,int

exp);

string

mul_singleint(

const

string&s1

,int n)

for (

intj=

0,i=

len1

-1;

i>=

0; ++j,

--i)

// multiply every int element in array

intlastcarry=0;

for (

inti=

0; i

<

len1;

++i)

num1

[len1]+=

lastcarry;

//store result.

inti

=len1;

while(

num1[i

]==0)

--i;

for (

i; i

>=

0; --

i)

delete

num1;

return

ret;

}string

mul_int(

const

string&s1

,const

string

&s2)

return

ret;

}string

mul_float(

const

string&s1

,const

string

&s2)

if (

pos2

>=

0)

string

ret;

ret=

mul_int(

ss1,ss2);

for (

intj=

ndot

-ret

.length();

j>

0; j

--)

ret.

insert(

ret.begin

(),'0');

if (

ndot

>

0)

return

ret;

}string

add(

const

string&s1

,const

string

&s2)

intlen1

,len2;

len1=s1

.length();

len2=s2

.length();

for (

inti=

len1-1

,j=0;

i>=

0; --i,

++j)

for (

inti=

len2-1

,j=0;

i>=

0; --i,

++j)

//add every int element in array

for (

inti=

0; i

<

len;

++i)

}//store result.

string

ret;

inti

=len;

while(

num1[i

]==0)

--i;

for (

i; i

>=

0; --

i)

delete

num1;

delete

num2;

return

ret;

}void

removezero(

string

& s)

while (

*(s.

end()

-1) ==

'0')

return;

}void

removedot(

string

& s)

}int

calpointnum(

const

string&s1

,const

string

&s2)

intpos1=s1

.find(

'.');

if (

pos1

>=

0)

pos1

= s .

length()

-pos1-1;

}else

pos1=0;

intpos2=s2

.find(

'.');

if (

pos2

>=

0)

pos2

= s .

length()

-pos2-1;

}else

pos2=0;

return

pos1

+pos2;

}string

exponentiation(

const

string&s1

,int

exp)

return

ret;

}int

main()

return

0;

}

大數運算 冪次方運算

以下演算法計算n的m次方 m的定義域是 1,2 31 n的定義域是 0,65535 原理就是按位相乘,處理進製 include include include void main void std vectorvecnum 1,n 用vector儲存大數,首位賦n for int i 0 i m 1...

大數求冪運算

題目 小明是個小學五年級的學生,為了早點去看自己愛看的 他想快點把作業做完。可是可惡的數學老師今天卻布置了一道難題,小明想了很久也不知道該怎麼做。你的任務就是幫小明解決掉這道數學題。題目是這樣子的,有乙個整數a 2 31 a 2 31 1 計算它的整數冪 a n,其中 1 n 99 第一行是乙個整數...

大數處理之二(冪運算)

對於冪運算來說,就是相同的幾個數相乘,改成大數處理問題,同樣可以轉化成兩個大數相乘問題,乘得的積作為乙個新數,再用這個新數與另乙個作積,這樣迴圈下去即可進行冪運算。對於兩個大數該如何處理 對於字串s1 100 中存放第乙個大數,s2 100 中存放第二個大數 定義兩個整型陣列 a 100 b 100...