<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們已經知道,正常的兩位整形資料通過*相乘,C語言中int為4位元組,32bit(位元組),其機器碼第一位為符號位,餘下31位元表示數位,表示範圍:-2^31(-2147483648)~2^31-1(2147483647),但超過了這個範圍我們該如何做呢?
提示:將數位以字串的形式進行操作
範例:
我們把每一個數都看成是一個字串,每一個元素為十進位制數位所對應的字 符,由於是後面的元素先進行運算,故我們應當把末尾的字元賦值給a[0],以此類推。如下所示:(s1,s2分別表示兩個相乘的字串)
for(i=0; i<n; i++) a[i]=s1[n-i-1]-'0'; for(i=0; i<m; i++) b[i]=s2[m-1-i]-'0';
當我們把需要操作的前後順序弄清之後,接下來就是核心的演演算法部分了(看了幾篇關於這個的博文,都沒有詳細的去解釋這個問題)。其實上一張圖片已經展示了將要做的演演算法步驟,但是說實話也不是說得很清楚,接下來看一下這張圖片:
當我們把需要做的元素具體化之後,我們看到了其中的一個規律,上下能夠進行相加的數位(通過-‘0’已經變成了數位)他們的因數的角標和是相等的,那麼,我們就知道如何進行計算:
/* 乘運算*/ for(i=0; i<n; i++) for(j=0; j<m; j++) c[i+j]+=a[i]*b[j];
n,m分別代表字串的長度,也就是相乘元素的個數。解決了這個問題,剩下的問題便不是問題
程式碼如下(範例):
//大數乘法(字串相乘) #include<stdio.h> #include<math.h> #include<string.h> #define M 10005 char s1[M],s2[M],s[M]; int a[M],b[M],c[M]; int main() { int i,j,m,n,k; while(~scanf("%s%s",s1,s2)) { memset(c,0,sizeof(c)); n=strlen(s1); m=strlen(s2); k=n+m;//保證相乘後的位數不會大於k printf("s1的長度=%d s2的長度=%dn",n,m); /*把字串s1和s2逆序用數位排列*/ for(i=0; i<n; i++) a[i]=s1[n-i-1]-'0'; for(i=0; i<m; i++) b[i]=s2[m-1-i]-'0'; /* 乘運算*/ for(i=0; i<n; i++) for(j=0; j<m; j++) c[i+j]+=a[i]*b[j]; for(i=0; i<=k; i++)//進行進位元運算 { if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]%=10; } } /*去除前導0*/ i=k; while(c[i]==0) i--; /*判斷兩個非負數之積是否為0,以及逆序列印c[]*/ if(i<0) printf("0"); else { for(; i>=0; i--) printf("%d",c[i]); } printf("n"); } return 0; }
這裡我們利用memset將c進行初始化,那為什麼不直接char c[]={0}?是因為如果字串太長,將會使程式碼執行較慢,並不是最優解,而memset函數是直接存取地址,執行速度將會提升。
memset有三個引數,通過圖片我們發現依次為陣列名,賦值整形,以及型別位元組長度,我們可以利用sizeof(void)求出
對於這裡相乘的演演算法,一開始也不是很清楚,但當把他這種抽象的東西表達出來使其具象化,也不難看出其中的奧妙。
到此這篇關於C語言超詳細講解字串相乘的文章就介紹到這了,更多相關C語言 字串相乘內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45