日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么c语言会入门到入土,大整数从入门到入土

發(fā)布時(shí)間:2024/3/26 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么c语言会入门到入土,大整数从入门到入土 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大整數(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。