C語言綜合實驗2 長整數運算

2022-03-08 14:02:32 字數 3807 閱讀 8948

1、實驗題目:長整型數運算,c中的long int所能表示的資料範圍有限,現要求程式設計完成超過long int所能表示的資料範圍以上的十進位制正的長整數的加法和乘法運算。

1) int readlongint(char * x); 此函式用於讀入乙個正的長整數到x中,函式返回長整數的實際長度;要求輸入時檢查所讀入的字串是否是合法的長整數,如不是提示使用者直到輸入合法的長整數為止;

2) char *addition(char *x,char *y); 此函式用於實現用字串表示的長整數的加法運算,其計算結果儲存在乙個動態申請的字元陣列空間(其長度為參與加法運算的兩個長整數中較長的乙個的長度加1)中,函式返回該陣列的指標。

3) char *multiplacation(char * x,char *y);此函式用於實現用字串表示的兩個長整數的乘法運算,可考慮先將乘數的從個位到最高位的每一位與被乘數相乘(這一步可利用addition函式實現),再進行向左偏移後相加完成;

注意:此程式設計最關鍵的問題是對字元陣列的下標定位和動態申請恰當的記憶體空間以儲存計算結果,注意在乘法運算中**不再使用的記憶體空間。

3、實現程式分為三個檔案,function.h、function.c、main.c。具體實現如下所示:

function.h標頭檔案宣告操作函式

1

#ifndef functuon_head

2#define function_head34

//大數計算函式宣告56

/*此函式用於讀入乙個正的長整數到x中,函式返回長整數的實際長度*/7

int readlongint(char *x);8//

讀入乙個有效的正整數x

9int readdata(char *x);

10//

逆序字串

11void reverse_string(char *x);

1213

/*此函式用於實現用字串表示的長整數的加法運算

*/14

char *addition(char *x,char *y);

15//

x累計n次

16char* addition_n_times(char* x,int

n);17

/*將正整數進行左移動n位

*/18

void left_move(char *x);

19/*

此函式用於實現用字串表示的兩個長整數的乘法運算

*/20

char *multiplacation(char * x,char *y);

2122

#endif

function.c是操作函式的實現,源**如下所示:

1 #include "

function.h

"2 #include 3 #include

4 #include 56/*

此函式用於讀入乙個正的長整數到x中,函式返回長整數的實際長度*/7

int readlongint(char *x)821

else

//輸入的字元不在0-9之間,說明輸入的正整數無效

22 valid = 0;23

}24if(valid == 1)25

29else

30return -1; //

無效整數標記31}

32//

讀入乙個有效的正整數x

33int readdata(char *x)

3444

else

45break;46

}47return

count;48}

4950

//逆序字串

51void reverse_string(char *x)

5262}63

/*此函式用於實現用字串表示的長整數的加法運算

*/64

char *addition(char *x,char *y)

6585

//計算還沒有計算的高位

86while(i

8793

while(i

94100

//最後高位有進製,需要考慮

101if

(carry)

102 z[i++] = carry | 0x30

; 103 z[i] = '

\0'; //

新增字串末尾

104 reverse_string(x); //

恢復原來的次序

105 reverse_string(y); //

恢復原來的次序

106 reverse_string(z); //

逆序z,從高位到低位輸出

107return

z;108

}109

/*將正整數進行左移動n位

*/110

void left_move(char *x,int

n)111

120 x[len] = '

\0';//

字串結束符

121}

122123

//將x累加n次

124char* addition_n_times(char* x,int

n)125

145return

ret;

146}

147/*

此函式用於實現用字串表示的兩個長整數的乘法運算

*/148

char *multiplacation(char * x,char *y)

149177

return

ret;

178 }

main.c是主函式部分,給出乙個選單進行選擇操作,**如下所示:

1 #include "

function.h

"2 #include 3 #include 4

5#define maxnum 25667

void menu(); //

選單函式宣告

8char

a[maxnum];

9char

b[maxnum];

1011

intmain()

1240

else

41 printf("

請先輸入兩個長正整數,再執行求和操作.\n");

42break;43

case3:

44if(flag == 1)45

49else

50 printf("

請先輸入兩個長正整數,再執行乘積操作.\n");

51break;52

case0:

53 printf("

謝謝使用,再見.\n");

54 system("

pause");

55 exit(0

);56

default

:57 printf("

輸入錯誤,請按要求選擇操作.\n");

58}59}

60return0;

61}6263

void

menu()

64

4、測試結果如下所示:

C語言實驗 整數字

c語言實驗 整數字 time limit 1000ms memory limit 65536kb submit statistic problem description 輸入乙個不多於5位的正整數,要求 1 求出它是幾位數 2 分別輸出每一位數字 3 按逆序輸出各位數字。input 輸入乙個不多於...

C語言實驗 分割整數

c語言實驗 分割整數 time limit 1000ms memory limit 65536kb submit statistic problem description 從鍵盤輸入乙個長整數 不超過10位 從高位開始逐位分割並輸出。input 正整數n,不含前導零。output 分割的整數序列,...

C語言實驗 整數字

problem description 輸入乙個不多於5位的正整數,要求 1 求出它是幾位數 2 分別輸出每一位數字 3 按逆序輸出各位數字。input 輸入乙個不多於5位的正整數。output 輸出資料有3行,第一行為正整數字數,第二行為各位數字,第三行為逆序的各位數字。example input...