为什么c语言会入门到入土,大整数从入门到入土
大整數(shù)(高精)
聲明,這是一篇從入門到入土的大整數(shù)講解,可能有那么一點(diǎn)小長(zhǎng),內(nèi)容涵蓋大整數(shù)加法,減法和乘法,但由于水平有限,還是有不足之處希望評(píng)論提出。如果你是一個(gè)萌新,相信我,我會(huì)寫得非常詳細(xì),你一定能看懂,同時(shí)也要相信自己能看懂。
這篇講解大概思路是按照我的進(jìn)步,一點(diǎn)一點(diǎn)寫出來的。
另外,這篇大整數(shù)講解部分的所有數(shù)組下標(biāo)都是從0開始儲(chǔ)存,從1儲(chǔ)存的代碼會(huì)在文章的最后貼上,從0儲(chǔ)存的代碼也會(huì)貼上,都是完整的且通過檢驗(yàn)的。
剛學(xué)完最基礎(chǔ)的c語言
好了,剛學(xué)完最基礎(chǔ)的C語言,現(xiàn)在我們可以通過大整數(shù)來練習(xí)我們所學(xué)習(xí)的數(shù)組,循環(huán),判斷和函數(shù)了。
如何讀入和儲(chǔ)存
大整數(shù),不可能通過一個(gè)整數(shù)存下來,我們可以用數(shù)組。
1.先用字符數(shù)組讀入,再用整數(shù)數(shù)組儲(chǔ)存
先用字符數(shù)組讀入
所給出數(shù)據(jù)格式
(1)如果給出兩個(gè)數(shù)字以一個(gè)空格隔開,例如這樣
11111111111 11111111111
我們可以使用scanf讀入兩個(gè)整數(shù),儲(chǔ)存在兩個(gè)字符數(shù)組中(這兩個(gè)字符數(shù)組取名為s1, s2)
規(guī)定整數(shù)長(zhǎng)度不超過1w,讀入代碼就可以這樣寫:
#include
const int maxlen = 1e4 + 10; //1e4是10000科學(xué)記數(shù)法,具體請(qǐng)自行查資料
char s1[maxlen], s2[maxlen];
int main() {
//下標(biāo)從0開始
scanf("%s%s", s1, s2);
return 0;
}
(2)如果給出兩個(gè)數(shù)以一個(gè)空行隔開,例如這樣:
11111111111
11111111111
我們可以用gets或fgets讀入并儲(chǔ)存在兩個(gè)字符數(shù)組中,這是代碼:
#include
const int maxlen = 1e4 + 10; //1e4是10000科學(xué)記數(shù)法,具體請(qǐng)自行查資料
char s1[maxlen], s2[maxlen];
int main() {
//scanf也可以應(yīng)付這種情況
scanf("%s%s", s1, s2);
//gets的使用方法是傳入地址
gets(s1); gets(s2);
//fgets()有三個(gè)參數(shù)第一個(gè)是需要讀入字符數(shù)組的地址, 第二個(gè)是指定最大讀入長(zhǎng)度,防止下標(biāo)越界造成不必要的麻煩,
// 第三個(gè)是指定讀入文件,因?yàn)槲覀兪菢?biāo)準(zhǔn)輸入輸出,所以寫stdin就好了,如果不懂就先記著,理解前兩個(gè)就好了
//另外添加一點(diǎn),fgets會(huì)讀入換行,也就是說你會(huì)發(fā)現(xiàn)讀入的字符串的長(zhǎng)度比預(yù)想中大1,不要吃驚,只是在原字符串末尾多了一個(gè)'\n',使用的時(shí)候注意一下就好了
fgets(s1, maxlen, stdin);
fgets(s2, maxlen, stdin);
return 0;
}
添加:
如果你學(xué)了c++,且了解了string這個(gè)類,string的讀入方式常見的有兩種,上代碼:
#include
#include
#include
using namespace std;
string s1, s2;
int main() {
//面對(duì)空格和空行都可以的
cin >> s1 >> s2;
//讀一整行
//關(guān)于getline(),有三個(gè)參數(shù),因?yàn)槲乙膊皇呛芮宄?#xff0c;所以我不寫,強(qiáng)記就好了,
//因?yàn)間etline()第二個(gè)參數(shù)是指定最大長(zhǎng)度 string長(zhǎng)度可以增減,我們就不需要這個(gè)參數(shù),傳兩個(gè)就夠了
getline(cin, s1);
getline(cin, s2);
return 0;
}
讀入問題解決了。
再用字符數(shù)組儲(chǔ)存
我們用整數(shù)數(shù)組倒序儲(chǔ)存,一個(gè)一位
例如"12345678910"儲(chǔ)存起來,數(shù)組就是這樣的{0, 1, 9, 8, 7, 6, 5, 4, 3, 2, 1}
代碼是這樣的:
#include
#include
const int maxlen = 1e4 + 10;
char s1[maxlen], s2[maxlen];
int a[maxlen], b[maxlen];
int main() {
//讀入
scanf("%s%s", s1, s2);
//strlen()取得字符數(shù)組的長(zhǎng)度,在cstring中數(shù)為字符數(shù)組的地址
int len1 = strlen(s1), len2 = strlen(s2);
for(int i = 0; i < len1; i++) a[i] = s1[len1 - 1 - i] - '0';
for(int i = 0; i < len2; i++) b[i] = s2[len2 - 1 - i] - '0';
}
/*
關(guān)于字符向整數(shù)轉(zhuǎn)化轉(zhuǎn)化時(shí)為什么要減'0'
在ASCII碼中'0'對(duì)應(yīng)的是數(shù)字48,如果直接轉(zhuǎn)成整數(shù)不減去'0'那么所得數(shù)是48,而不是我們所期待的0
對(duì)于'1','2','3','4','5','6','7','8','9','0'
它們?cè)贏SCII碼中的排序是相鄰且按照大小排序的的
'0'對(duì)應(yīng)48,那么其他按照對(duì)應(yīng),分別是49, 50, 51, 52, 53, 54, 55, 56, 57, 58
減去'0',就可以得到相應(yīng)數(shù)字了
*/
為什么是倒序,一是因?yàn)檫@樣模擬時(shí)進(jìn)位和借位方便,二是我們?cè)诖笳麛?shù)運(yùn)算時(shí)都是先從最低位考慮,倒序可以直接從最后一位開始處理。
總結(jié)
以上是生活随笔為你收集整理的为什么c语言会入门到入土,大整数从入门到入土的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超详细的mac环境下编译魔改frida-
- 下一篇: 计算机软硬件实训学什么,计算机实训报告