如何写一个实现2个N位2进制数相加的代码,最好有伪代码
RT,算法导论2.1.4习题
[解决办法]
仅供参考
#include <stdio.h>#include <string.h>#define MAXLEN 1000char a1[MAXLEN];char a2[MAXLEN];static int v1[MAXLEN];static int v2[MAXLEN];static int v3[MAXLEN];int i,j,n,L,z;void main(void) { scanf("%d",&n); for (j=0;j<n;j++) { scanf("%s%s",a1,a2); L=strlen(a1); for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0'; L=strlen(a2); for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0'; for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i]; for (i=0;i<MAXLEN;i++) { if (v3[i]>=10) { v3[i+1]+=v3[i]/10; v3[i]=v3[i]%10; } } printf("Case %d:\n", j+1); printf("%s + %s = ", a1, a2); z=0; for (i=MAXLEN-1;i>=0;i--) { if (z==0) { if (v3[i]!=0) { printf("%d",v3[i]); z=1; } } else { printf("%d",v3[i]); } } if (z==0) printf("0"); printf("\n"); }}//Sample Input//3//0 0//1 2//112233445566778899 998877665544332211////Sample Output//Case 1://0 + 0 = 0//Case 2://1 + 2 = 3//Case 3://112233445566778899 + 998877665544332211 = 1111111111111111110
[解决办法]
二进制字符串,从低位到高位一次放置。
#include <stdio.h>char bitadd(char b1, char b2, char* c){ char b; b1 -= '0'; b1 &= 1; b2 -= '0'; b2 &= 1; b = b1 + b2 + *c; *c = (b >> 1) & 1; return (b & 1) + '0';}void binadd(char b1[], char b2[], int n, char b[]){ int i; char c; c = 0; for(i = 0; i < n; i++) { b[i] = bitadd(b1[i], b2[i], &c); } if(c != 0) { b[n] = '1'; b[n + 1] = '\0'; } else { b[n] = '\0'; }}int main(char argc, char* argv[]){ char b[6]; char b1[5] = "1101"; char b2[5] = "0101"; binadd(b1, b2, 4, b); printf("%s\n", b); // 10101 return 0;}