c語言面試題之大數運算

2021-06-13 14:46:05 字數 3439 閱讀 8749

請使用**計算: 1234567891011121314151617181920*2019181716151413121110987654321

#include 

<

iostream

>

#include

<

algorithm

>

#include

<

stdio.h

>

#include

<

string

.h>

using

namespace

std;

#define

max_digit 500

//大數運算:加法

intmultiply(

int*

a,int*b,

int*&

result);

//大數運算:乘法

intadd(

int*

a,int*b,

int*&

result);

//大數運算:減法

intsub(

int*

a,int*b,

int*&

result);

//逐位調整大數,如result為11 9 22 -3 -2調整為:1 0 3 9 -3,然後再對符號提公升到最高位: 9 9 6 0 2... ... -1

//表示大數的值為-20699

void

ajustencodearray(

int*&

result,unsigned

intimaxnum);

//輸出大數

void

printbignum(

int*

result);

//把個位在高位的字元陣列轉為個位在低位(下標0)的整型陣列

void

carray2revdigitarray(

char

*carray,

int*

digitarray,unsigned

intinum);

//大數運算:加法

intadd(

int*

a,int*b,

int*&

result)

inti=0

,j=0;

//初始化result陣列

for(i=0

;i<

max_digit*2

;++i)for(i=

0;i<

max_digit;

++i)

ajustencodearray(result,max_digit*2

);return0;

}//大數運算:減法

intsub(

int*

a,int*b,

int*&

result)

inti=0

,j=0;

//初始化result陣列

for(i=0

;i<

max_digit*2

;++i)for(i=

0;i<

max_digit;

++i)

ajustencodearray(result,max_digit*2

);return0;

}//大數乘法

intmultiply(

int*

a,int*b,

int*&

result)

inti=0

,j=0;

//初始化result陣列

for(i=0

;i<

max_digit*2

;++i)//

a[0]為個位起算,結果的偏移位為i+j,

//如個位*十位,則運算結果的偏移為0+1即1

//例子:a[0]為9,b[1]為7,則result[1]加63

for(i=0

;i<

max_digit;

++i)

}ajustencodearray(result,max_digit*2

);return0;

}//逐位調整大數,如result為11 9 22 -3 -2調整為:1 0 3 9 -3,然後再對符號提公升到最高位: 9 9 6 0 2... ... -1

//表示大數的值為-20699

void

ajustencodearray(

int*&

result,unsigned

intimaxnum)}//

從低位開始往上調整,規則:大於10的正數要進製,負數要借位

for(i=0

;i<

inumflag;

++i)

else

if(result[i]

<0)

}//若有效最高位為負數,需要對負號進行提公升,就是對高位與餘下低位進行一次減法

if(result[inumflag]

<0)

;iminuend[inumflag]

=iweight;

//被減數

result[inumflag] =0

;

//構造減數

for(i=0

;i<

inumflag+1

;++i)//

調整借位

for(i=0

;i<

inumflag;

++i)

}result[imaxnum-1

] =-1

;}}void

printbignum(

int*

result)

index--;

}if(bnegative)

for(

inti

=index;i

>=0;

--i)

printf("\n

");}void

carray2revdigitarray(

char

*carray,

int*

digitarray,unsigned

intinum)

for(i=0

; i<

ilen;

++i)

}int

main()

printbignum(result);

ret=

add(a,b,result);

if(ret!=0

)printbignum(result);

ret=

sub(a,b,result);

if(ret!=0

)printbignum(result);

return0;

}

c語言之大數基本運算

今天我想給大家介紹有關大數運算的方法,大數這裡可以算是乙個難點同樣也是重點,以下的 只針對非負數,大家在看之前可以自己思考一下。考慮到整型變數的範圍有限,所以我們用字元陣列來定義輸入的兩個大數,首先要使它們相應的位對齊,位數少的在前補0,然後各個位數的相加要考慮到進製,這裡我定義為s。下面是全部 i...

大數運算之大數加法(C )

眾所周知,加法運算是小學一年級的學生就懂的知識點。即從兩個數個位開始,按位相加,逢十進一。對於懂得c 的你而言,so so so easy 只需要利用加法運算子即可 但若你要處理的數值位數十分巨大,如兩個位數為20的數相加。在紙上進行運算十分簡單,但在c 中直接使用加法運算子卻無法實現你的預期,這是...

C語言面試題分類 位運算

1.不用臨時變數交換兩個整數。a a b b a b a a b 2.實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如9的二進位制是1001,則輸出2。int check count fun int number return count int main 錯誤 如下 有符號數會造成...