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