最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言超詳細(xì)講解字符串相乘

 更新時(shí)間:2022年03月29日 17:19:53   作者:Fighting陽(yáng)!  
這篇文章主要介紹了用C語(yǔ)言如何來(lái)實(shí)現(xiàn)字符串相乘的方法,這里我們會(huì)利用到memset函數(shù),memset函數(shù)是對(duì)較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法,可以說(shuō)是初始化內(nèi)存的“萬(wàn)能函數(shù)”,下面我們?cè)敿?xì)了解一下

前言

我們已經(jīng)知道,正常的兩位整形數(shù)據(jù)通過(guò)*相乘,C語(yǔ)言中int為4字節(jié),32bit(字節(jié)),其機(jī)器碼第一位為符號(hào)位,余下31位表示數(shù)字,表示范圍:-2^31(-2147483648)~2^31-1(2147483647),但超過(guò)了這個(gè)范圍我們?cè)撊绾巫瞿兀?/p>

提示:將數(shù)字以字符串的形式進(jìn)行操作

一、分析思路

示例:

我們把每一個(gè)數(shù)都看成是一個(gè)字符串,每一個(gè)元素為十進(jìn)制數(shù)字所對(duì)應(yīng)的字 符,由于是后面的元素先進(jìn)行運(yùn)算,故我們應(yīng)當(dāng)把末尾的字符賦值給a[0],以此類(lèi)推。如下所示:(s1,s2分別表示兩個(gè)相乘的字符串)

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';

當(dāng)我們把需要操作的前后順序弄清之后,接下來(lái)就是核心的算法部分了(看了幾篇關(guān)于這個(gè)的博文,都沒(méi)有詳細(xì)的去解釋這個(gè)問(wèn)題)。其實(shí)上一張圖片已經(jīng)展示了將要做的算法步驟,但是說(shuō)實(shí)話也不是說(shuō)得很清楚,接下來(lái)看一下這張圖片:

當(dāng)我們把需要做的元素具體化之后,我們看到了其中的一個(gè)規(guī)律,上下能夠進(jìn)行相加的數(shù)字(通過(guò)-‘0’已經(jīng)變成了數(shù)字)他們的因數(shù)的角標(biāo)和是相等的,那么,我們就知道如何進(jìn)行計(jì)算:

/* 乘運(yùn)算*/
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
                c[i+j]+=a[i]*b[j];

n,m分別代表字符串的長(zhǎng)度,也就是相乘元素的個(gè)數(shù)。解決了這個(gè)問(wèn)題,剩下的問(wèn)題便不是問(wèn)題

二、使用步驟

1、代碼如下

代碼如下(示例):

//大數(shù)乘法(字符串相乘)
#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;//保證相乘后的位數(shù)不會(huì)大于k
        printf("s1的長(zhǎng)度=%d s2的長(zhǎng)度=%d\n",n,m);
 /*把字符串s1和s2逆序用數(shù)字排列*/
        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';
          /* 乘運(yùn)算*/
        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++)//進(jìn)行進(jìn)位操作
        {
            if(c[i]>=10)
            {
                c[i+1]+=c[i]/10;
                c[i]%=10;
            }
        }
 /*去除前導(dǎo)0*/
        i=k;
        while(c[i]==0) i--;
 /*判斷兩個(gè)非負(fù)數(shù)之積是否為0,以及逆序打印c[]*/
        if(i<0) printf("0");
        else
        {
            for(; i>=0; i--)
                printf("%d",c[i]);
        }
        printf("\n");
    }
    return 0;
}

2、memset函數(shù)

這里我們利用memset將c進(jìn)行初始化,那為什么不直接char c[]={0}?是因?yàn)槿绻址L(zhǎng),將會(huì)使代碼運(yùn)行較慢,并不是最優(yōu)解,而memset函數(shù)是直接訪問(wèn)地址,運(yùn)行速度將會(huì)提升。

memset有三個(gè)參數(shù),通過(guò)圖片我們發(fā)現(xiàn)依次為數(shù)組名,賦值整形,以及類(lèi)型字節(jié)長(zhǎng)度,我們可以利用sizeof(void)求出

三、總結(jié)

對(duì)于這里相乘的算法,一開(kāi)始也不是很清楚,但當(dāng)把他這種抽象的東西表達(dá)出來(lái)使其具象化,也不難看出其中的奧妙。

到此這篇關(guān)于C語(yǔ)言超詳細(xì)講解字符串相乘的文章就介紹到這了,更多相關(guān)C語(yǔ)言 字符串相乘內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++AVL樹(shù)4種旋轉(zhuǎn)詳講(左單旋、右單旋、左右雙旋、右左雙旋)

    C++AVL樹(shù)4種旋轉(zhuǎn)詳講(左單旋、右單旋、左右雙旋、右左雙旋)

    AVL樹(shù)即平衡二叉搜索樹(shù),平衡因子bf=右子樹(shù)的高度-左子樹(shù)的高度,bf為0,-1,1時(shí),此樹(shù)即平衡,下面這篇文章主要給大家介紹了關(guān)于C++AVL樹(shù)4種旋轉(zhuǎn)(左單旋、右單旋、左右雙旋、右左雙旋)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • C語(yǔ)言詳解關(guān)鍵字sizeof與unsigned及signed的用法

    C語(yǔ)言詳解關(guān)鍵字sizeof與unsigned及signed的用法

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言關(guān)鍵字sizeof&&unsigned&&signed,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • c/c++輸出重定向的方法

    c/c++輸出重定向的方法

    c/c++輸出重定向的方法,需要的朋友可以參考一下
    2013-03-03
  • 基于Matlab實(shí)現(xiàn)俄羅斯方塊游戲

    基于Matlab實(shí)現(xiàn)俄羅斯方塊游戲

    俄羅斯方塊是一個(gè)最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計(jì)和編程的益智類(lèi)視頻游戲。本文將利用Matlab實(shí)現(xiàn)這一經(jīng)典的小游戲,需要的可以參考一下
    2022-03-03
  • C語(yǔ)言實(shí)例講解四大循環(huán)語(yǔ)句的使用

    C語(yǔ)言實(shí)例講解四大循環(huán)語(yǔ)句的使用

    C語(yǔ)言有四大循環(huán)語(yǔ)句,他們之間可以進(jìn)行任意轉(zhuǎn)換。本文將首先對(duì)其語(yǔ)法進(jìn)行講解,然后通過(guò)一個(gè)實(shí)例用四種循環(huán)來(lái)實(shí)現(xiàn)。相信通過(guò)本文的學(xué)習(xí),大家都能夠?qū)語(yǔ)言循環(huán)語(yǔ)句有著熟練的掌握
    2022-05-05
  • C語(yǔ)言從編譯到運(yùn)行過(guò)程詳解

    C語(yǔ)言從編譯到運(yùn)行過(guò)程詳解

    這篇文章主要介紹了C語(yǔ)言從編譯到運(yùn)行的一個(gè)過(guò)程的相關(guān)資料,需要的朋友可以參考下面文章具體的內(nèi)容
    2021-09-09
  • C語(yǔ)言的三種條件判斷語(yǔ)句你都了解嗎

    C語(yǔ)言的三種條件判斷語(yǔ)句你都了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的三種條件判斷語(yǔ)句,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++入門(mén)筆記之std::vector容器詳解

    C++入門(mén)筆記之std::vector容器詳解

    這篇文章主要給大家介紹了關(guān)于C++之std::vector容器的相關(guān)資料,vector,一種隨機(jī)訪問(wèn)的數(shù)組類(lèi)型,它提供了對(duì)數(shù)組元素的快速、隨機(jī)訪問(wèn),以及在序列尾部快速、隨機(jī)的插入和刪除操作,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語(yǔ)言如何實(shí)現(xiàn)頭插法建立單鏈表

    C語(yǔ)言如何實(shí)現(xiàn)頭插法建立單鏈表

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)頭插法建立單鏈表的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

西乌珠穆沁旗| 长治县| 金昌市| 遂平县| 天祝| 镇赉县| 新邵县| 穆棱市| 昌黎县| 衢州市| 察哈| 留坝县| 蛟河市| 同心县| 大埔县| 汝城县| 深州市| 镇雄县| 铜陵市| 略阳县| 十堰市| 嘉义县| 莲花县| 景泰县| 刚察县| 比如县| 原平市| 宜章县| 柯坪县| 高州市| 内丘县| 郓城县| 平湖市| 琼海市| 临海市| 兴山县| 内丘县| 抚顺市| 樟树市| 山东省| 漯河市|