首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么写一个实现2个N位2进制数相加的代码,最好有伪代码

2012-09-14 
如何写一个实现2个N位2进制数相加的代码,最好有伪代码RT,算法导论2.1.4习题[解决办法]仅供参考C/C++ code#

如何写一个实现2个N位2进制数相加的代码,最好有伪代码
RT,算法导论2.1.4习题

[解决办法]
仅供参考

C/C++ code
#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
[解决办法]
二进制字符串,从低位到高位一次放置。

C/C++ code
#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;} 

热点排行