poj 2845 字符串(二进制数相加)

来源:互联网 发布:黑马程序员零基础教程 编辑:程序博客网 时间:2024/06/09 19:59

题意:给定两个二进制数,把他们相加。题目不难,但是还是要仔细。

思路:字符串模拟。注意两组数据即可:

1、00000+000000=0

2、000001+00001=10

#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define clr(s,t) memset(s,t,sizeof(s));#define N 1005int T,c,n;char s[100],t[100];void reverse(char *x){    int i,j,len = strlen(x);    for(i = 0,j = len-1;i<j;i++,j--){        char ch = x[i];        x[i] = x[j];        x[j] = ch;    }}int main(){    scanf("%d",&T);    for(c = 1;c<=T;c++){        int i,j,lens,lent;        memset(t, '0', sizeof(s));        scanf("%s %s",s,t);        lens = (int)strlen(s);        lent = (int)strlen(t);        reverse(s);        reverse(t);        s[lens] = t[lent] = '0';        for(i = 0;i<lens;i++)            if(s[i] == '1')                t[i]++;        j = 0;        lent = max(lens,lent);        for(i = 0;i<=lent;i++){            if(j)                t[i]++;            if(t[i] >= '2'){                j = 1;                t[i] -= 2;            }else                j = 0;        }        j = lent;        while(j && t[j] == '0')            j--;        printf("%d ",c);        for(;j>=0;j--)            putchar(t[j]);        printf("\n");            }    return 0;}


0 0
原创粉丝点击