LeetCode-67. Add Binary


問題描述

Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".

分析

題目要求完成兩個二進制的加法艾岂,加數(shù)與被加數(shù)分別來源于兩個字符串馒过,最終加和結(jié)果以二進制字符串形式返回。

解題思路

(1)二進制加法與十進制加法類似悦陋,從低位開始加和贱田,直到高位忌栅,但在加和過程中需要考慮低位數(shù)加和的進位沸手。假設兩個二進制數(shù)分別為a1,b1锄贼,低位的進位為c1票灰,加法和為s,進位為c則:
![](http://www.forkosh.com/mathtex.cgi? \Large s=(a1+b1+c1)%2)
![](http://www.forkosh.com/mathtex.cgi? \Large c=(a1+b1+c1)/2)
(2)二進制加法同時還需要考慮最高位的進位情況咱娶,若最高位進位不為零米间,則和的位數(shù)比兩個加數(shù)中的位數(shù)最多的多一位。

(2)若兩個數(shù)位數(shù)不同膘侮,則對較短的數(shù)高位補零使其位數(shù)相同屈糊。

代碼

char* addBinary(char* a, char* b) {
    int size,size1,size2,i,j;
    int carr=0;                                    //進位
    size1=strlen(a);                               //字符串長度
    size2=strlen(b);
    size=size1;
    char *result;                                  //加和返回結(jié)果
    if(size2>size1)
        size=size2;                                //最長字符串長度
    int a1[size];
    int b1[size];                                  //存放兩個加數(shù)
    int c1[size+1];
    for (i=0;i<size;i++)
    {   
        if(size1-i-1>=0)
            a1[i]=a[size1-i-1]-'0';                //將字符串轉(zhuǎn)換為整型,低位在前琼了,高位在后
        else                                       //若本字符串長度小于最長字符串逻锐,則高位補0;
            a1[i]=0;                 
        
        if(size2-i-1>=0)
            b1[i]=b[size2-i-1]-'0';
        else
            b1[i]=0;
    
        c1[i]=(a1[i]+b1[i]+carr)%2;                 //加和
        carr=(a1[i]+b1[i]+carr)/2;                  //進位
        
        printf("a[%d]=%d\n",i,a1[i]);
        printf("b1[%d]=%d\n",i,b1[i]);
        printf("c1[%d]=%d\n",i,c1[i]);
        printf("carr=%d\n",carr);
        
    }
    if(carr==1)                                     //高位有進位
    {
        c1[size]=carr;
        size=size+1;
    }

    result = (char* )malloc(sizeof(char)*(size+1));
    for (j=0;j<size;j++)
    {
        result[j]=c1[size-j-1]+'0';
        printf("%c\n",result[j]);
    }
    result[size]='\0';
    printf("%s",result);
    return result;
}

參考文獻

[1] http://blog.csdn.net/ojshilu/article/details/19638333
[2] http://www.cnblogs.com/kiven-code/archive/2012/09/15/2686922.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雕薪,一起剝皮案震驚了整個濱河市昧诱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌所袁,老刑警劉巖盏档,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異燥爷,居然都是意外死亡蜈亩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門前翎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稚配,“玉大人,你說我怎么就攤上這事港华〉来ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冒萄。 經(jīng)常有香客問我臊岸,道長,這世上最難降的妖魔是什么宦言? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任扇单,我火速辦了婚禮,結(jié)果婚禮上奠旺,老公的妹妹穿的比我還像新娘蜘澜。我一直安慰自己,他們只是感情好响疚,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布鄙信。 她就那樣靜靜地躺著,像睡著了一般忿晕。 火紅的嫁衣襯著肌膚如雪装诡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天践盼,我揣著相機與錄音鸦采,去河邊找鬼。 笑死咕幻,一個胖子當著我的面吹牛渔伯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肄程,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锣吼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蓝厌?” 一聲冷哼從身側(cè)響起玄叠,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拓提,沒想到半個月后读恃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡代态,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年狐粱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胆数。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖互墓,靈堂內(nèi)的尸體忽然破棺而出必尼,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布判莉,位于F島的核電站豆挽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏券盅。R本人自食惡果不足惜帮哈,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锰镀。 院中可真熱鬧娘侍,春花似錦、人聲如沸泳炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽花鹅。三九已至氧腰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刨肃,已是汗流浹背古拴。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留真友,地道東北人黄痪。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像锻狗,于是被迫代替她去往敵國和親满力。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容