999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種C++中大數乘法程序

2022-03-21 21:39:09孔柱新
計算機時代 2022年3期

孔柱新

摘? 要: 程序模擬了兩數相乘的人工豎式算法,利用C++標準模板庫中string類接收鍵盤輸入的大數,并用標準模板庫vector類存儲大數和相乘,解決了基本數據類型表示大數位數有限的問題。

關鍵詞: C++; 大數; string; vector

中圖分類號:TP312? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2022)03-81-03

Abstract: The program simulates the artificial vertical calculation method of multiplication of two numbers, using the string class of C++ standard template library to receive the large number of keyboard input. The vector class of standard template library is used to store large numbers and multiply them, which solves the digits limiting problem for the basic data type to represent the large number.

Key words: C++; large number; string; vector

0 引言

隨著科技的發展,計算機系統的性能越來越高,給人們的工作和生活帶來了便利。雖然是如此,但計算機所能表示的數據范圍還是有限制的。C++中long long的最大值[1]:9223372036854775807,long long的最小值:-9223372036854775808;unsigned long long的最大值:18446744073709551615;大數超出了計算機系統基本數據類型所能表達的范圍,例如有的數據可能有成百上千位,如果這樣的數據相乘就超出了基本數據類型所能表達的范圍。本文探討了一種利用C++程序編寫兩個大整數相乘的算法,希望起到拋磚引玉的效果。

1 乘法原理

首先看看兩數相乘的算法[2],模擬人工計算時的方法,也就是列豎式相乘,從低位向高位乘,在豎式計算中,我們是將乘數第一位與被乘數的每一位相乘,記錄結果之后,用第二位相乘,記錄結果并且左移一位,以此類推,直到計算完最后一位,再將各項結果相加,得出最后結果。為編程方便,并不急于處理進位,而將進位問題留待最后統一處理。

我們以135*47為例來說明計算過程:

⑴ 先算135*7,7*5得到35個1,7*3得到21個10,7*1得到7個100,如表1是存儲結果的數組形式。

⑵ 接下來算135*4,4*5得到20個10,4*3得到12個100,4*1得到4個1000,如表2。

⑶ 乘法過程完畢。接下來從a[0]開始向高位逐位處理進位問題。a[0]留下5,把3加到a[1]上,a[1]變為44 后,應留下4,把4 加到a[2]上……最終使得a里的每個元素都是1位數,結果就算出來了,是6345。如表3。

2 string和vector

大數的位數超出了基本數據類型的表示范圍,因此不能夠用基本數據類型來表示。string是C++標準庫的一個重要的部分,主要用于字符串處理。可以使用輸入輸出流方式直接進行string[3]操作,也可以通過文件等手段進行string操作。同時,C++的算法庫對string類也有著很好的支持,并且string類還和c語言的字符串之間有著良好的接口。其[ ]操作符支持對字符的讀寫。利用string來接受鍵盤輸入的任意位數的字符串,這就滿足了大數的任意多位的要求,string默認存儲的是字符串,故需要減去‘0’才能得到真實的數值。

Vector[4]是同一種類型的對象集合,能夠容納許多其他類型相同的元素,因此又被稱為容器。與string相同vector同屬于STL(Standard Template Library,標準模板庫)中的一種自定義的數據類型,可以廣義上認為是數組的增強版。在使用它時,需要包含頭文件vector,#include<vector>,vector容器與數組相比其優點在于它能夠根據需要隨時自動調整自身的大小以便容下所要放入的元素。此外,vector也提供了許多的方法來對自身進行操作。如push_back[5]操作,vector尾部加入一個數據;reserve()操作則告訴vector容器應該預留多少個元素的存儲空間。vector在容量不足時會足倍的增加容量。insert()[6] 函數有以下三種用法:iterator insert( iterator loc, const TYPE &val),在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器;void insert(iterator loc, size_type num, const TYPE &val),在指定位置loc前插入num個值為val的元素;void insert(iterator loc, input_iterator start, input_iterator? end),在指定位置loc前插入區間[start, end)的所有元素。

3 程序

下面是程序的一些清單:在程序的開始的地方,嵌入頭文件。

#include <iostream>

#include <vector>

#include <string>

#include<windows.h>

using namespace std;

3.1 是程序的輸入存儲

string str; //字符串

vector<int> num1,num2; //向量數組

cout << "please input the first number:\n";

cin >> str;

cout << endl;

num1.reserve(str.size()); //預留空間

for (i=0; i<str.size(); ++i)

{ num1.push_back(str[i] - '0'); } //存儲數據vector數組

cout << "please input the second number:\n";

cin >> str;

cout << endl;

num2.reserve(str.size());

for (i = 0; i < str.size(); ++i)

{ num2.push_back(str[i] - '0'); }

vector<int> num(num1.size() +num2.size() - 1, 0);

/*初始化vector數組c*/

3.2 兩個大數相乘程序

void bignumbermultiply(const vector<int> &num1,

const vector<int> &num2, vector<int> &result)

{ int a, b, c;

int tmp;

for (a=0; a<num1.size(); ++a)

{ c=a;

for (b=0; b< num2.size(); ++b)

{ result[c++] += num1[a] * num2[b]; }}

for (c=result.size()-1; c>=0; --c)

{ if (result[c]>9)

{ if (c != 0)

{ result[c-1] += result[c]/10; //進位相加

result[c]%=10;}

else{tmp=result[c]/10;//首位數字

result[c]%=10; //第二位數字

result.insert(result.begin(),tmp); }}}}/*插入到首位*/

3.3 輸出顯示程序

for (i=0; i<num.size(); ++i) { cout << num[i]; }

cout << endl;system("pause"); cout << endl;

此程序在Windows10下,VC++2010調試成功。如圖1所示。

4 結束語

本文程序利用string字符串來接收鍵盤輸入的大數,然后把所接收的字符串每一位存儲到vector數組中,按照兩數相乘的豎式計算規則進行計算。這期間要用到vector的一些方法。此程序并沒有檢測輸入數據的合法性,如果加入這些,程序將會更加完善。

參考文獻(References):

[1] 郭煒.新標準C++程序設計教程[M].清華大學出版社,2012

[2] 廖作斌.一種利用C++實現大數相乘的算法分析與設計[J].科技通報,2012(6)

[3] Stephen Prata.C++ Primer Plus中文版(第六版)[M].北京:人民郵電出版社,2012

[4] Stanley B.Lippman,Josee Lajoie,Barbara E.Moo. C++Primer中文版(第四版)[M].北京:人民郵電出版社,2006

[5] Bjarne Stroustrup C++程序設計語言(特別版)[M].北京:機械工業出版社,2009

[6] 鄭莉,董淵.C++語言程序設計(第四版)[M].北京:清華大學出版社,2010

3147501908242

主站蜘蛛池模板: 国产福利2021最新在线观看| 国产噜噜在线视频观看| 午夜日b视频| 凹凸国产熟女精品视频| 欧美亚洲国产一区| 97视频在线精品国自产拍| 亚洲成a人在线观看| 福利一区在线| 日韩欧美视频第一区在线观看| 亚洲成人在线免费| 亚洲人成在线免费观看| 在线观看国产一区二区三区99| 日本成人在线不卡视频| 找国产毛片看| 国产99在线| 波多野结衣一区二区三区AV| 好吊色妇女免费视频免费| 全部毛片免费看| 精品自窥自偷在线看| 青草视频免费在线观看| 韩国自拍偷自拍亚洲精品| 99热国产在线精品99| 国产亚洲一区二区三区在线| 欧美激情综合一区二区| 萌白酱国产一区二区| 韩日午夜在线资源一区二区| 亚洲av日韩av制服丝袜| 99re精彩视频| 日本人又色又爽的视频| 精品人妻一区二区三区蜜桃AⅤ | 婷婷综合在线观看丁香| 久久成人国产精品免费软件 | 欧美激情一区二区三区成人| 中文国产成人久久精品小说| 综合成人国产| 亚洲色图在线观看| 欧美日本激情| 成年女人a毛片免费视频| 在线中文字幕日韩| 最新国产高清在线| 一级全黄毛片| 国产乱人视频免费观看| 人人91人人澡人人妻人人爽| 亚洲黄色成人| 波多野结衣爽到高潮漏水大喷| 狠狠色成人综合首页| 91外围女在线观看| 国产精品黑色丝袜的老师| 人妻一区二区三区无码精品一区| 欧美伦理一区| 成年人国产网站| 中文精品久久久久国产网址| 欧美日韩午夜| 亚洲人成日本在线观看| 国产精品综合色区在线观看| 九九九精品视频| 在线国产你懂的| 亚洲中久无码永久在线观看软件| 国产成人精品亚洲77美色| 亚洲欧美日韩另类| 亚洲国产精品日韩av专区| 性激烈欧美三级在线播放| 日本国产在线| 免费一级毛片在线观看| 这里只有精品在线| 网久久综合| 欧美视频二区| 亚洲一区国色天香| 又粗又大又爽又紧免费视频| 国产特级毛片aaaaaa| 伊人久久久久久久| 国产丝袜啪啪| 国产精品太粉嫩高中在线观看| 茄子视频毛片免费观看| 在线日韩一区二区| 思思热精品在线8| 免费看美女自慰的网站| 国产精品亚洲五月天高清| 欧美精品成人一区二区视频一| 精品视频一区二区三区在线播| 91九色视频网| 亚洲精品成人片在线观看|