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標頭檔案宣告操作函式
1function.c是操作函式的實現,源**如下所示:#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
1 #include "main.c是主函式部分,給出乙個選單進行選擇操作,**如下所示: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 }
1 #include "4、測試結果如下所示: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
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...