日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法 2.二进制加法

發布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法 2.二进制加法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法 2. 二進制加法

      • 問題描述
      • 輸入
      • 輸出
      • 測試數據

問題描述

輸入

第一行輸入一個正整數 T (1≤T≤10)(1 \leq T \leq 10)(1T10),表示接下來有 T 組數據;
接下來 T 行,每行輸入兩個二進制串 aaabbb 中間用空格隔開,保證它們長度 1≤∣a∣,∣b∣≤1051 \leq |a|, |b| \leq 10 ^ 51a,b105 并且沒有前導 0。

輸出

對于每組數據,請按模擬二進制加法,按題目描述的格式輸出正確的運算結果,注意換行,沒有多余的空格和換行。

測試數據

說白了這個二進制加法的題,就是二進制加法嘛。。。
大一上C語言的課應該都做過這道題。。
具體的我就不說了
我本人算法實在不是很行,這是我小學期里做出來的第一道題了。。
雖然這只是我自己閑來無事把代碼傳上來,但是要真有學弟學妹看到了這段代碼的話,emmmmmm,小學期所有的代碼我都會上傳,實在想不出來可以當個參考,不過最好還是先自己想

#include<stdio.h> #include<string.h> //這是第二題 二級制加法 int main() { int N; //這道題的整體思路可以參考之前做過的十進制加減法 scanf("%d",&N); for (int n=1;n<=N;n++) { char str[100001]; int a[100001] = {0}, b[100001] = {0}, c[100001] = {0}, lenc, lena, lenb, i, j; //首先將兩個加數轉化為int類型,再倒序錄入兩個存儲數組scanf("%s",str); lena=strlen(str); // 簡單來說就是A和B分別存兩個加數// C來存結果,但是也可以直接把一個加數(A)也存在C里// 然后做C = C + B, 這樣C里面就是最后的結果// A就不動了,保存到最后用來輸出for(i=0;i<lena;i++) {a[i]=str[lena-1-i]-'0'; c[i]=str[lena-1-i]-'0';} scanf("%s",str); lenb=strlen(str); for(i=0;i<lenb;i++){b[i]=str[lenb-1-i]-'0';} lenc=(lena>lenb)?lena:lenb; for(i=0;i<lenc;i++) //在這里做高精度額的二進制加減法,只需要將十進制加減法中的10都換成2即可 // c[i + 1]這一行就是判斷需不需要加一個進位的1// c[i] 就是計算相加再判斷進位后剩下的結果// 舉個例子來說吧 如果是1234 + 5678// a[0] = c[0] = 4, a[1] = c[1] = 3 // b[0] = 8, b[1] = 7// 在第一次循環, i = 0, c[1] = (8 + 4) / 10 <- 這是進位的部分 + c[1] = 4// c[0] = (8 + 4) % 10 = 2// 在第二次循環, i = 1, c[2] = (7 + 4) / 10 + c[2] = 3// c[1] = (7 + 4) % 10 = 1{ c[i+1] += j = (c[i] + b[i]) / 2; c[i] = (c[i] + b[i]) % 2; } if(j) lenc++; //判斷是否需要進位//開始輸出 for(int x=1;x<=lenc+2-lena;x++) { printf(" "); } for(;lena > 0;lena --) { printf("%d",a[lena - 1]); } printf("\n"); printf("+"); for(int x = 1;x < lenc + 2 - lenb; x ++) { printf(" "); } for(; lenb > 0; lenb --) { printf("%d",b[lenb - 1]); } printf("\n"); for(int x = 1;x <= lenc + 2; x ++) { printf("-"); } printf("\n"); printf(" "); for(i = 0; i < lenc; i ++){ printf("%d",c[lenc - 1 - i]); }printf("\n"); } return 0; }

總結

以上是生活随笔為你收集整理的算法 2.二进制加法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。