您的位置:首页 > 编程语言 > C语言/C++

超长二进制相加,C语言实现

2016-12-17 19:47 267 查看
#include<stdio.h>

#define N 51

int add1(char first, char second){

    int i=3;

    if(first=='0' || first=='1' && second=='0' || second=='1'){

        i = first + second - 2*'0';

    }

    return i;

}

int main(){

    char first
= {'\0'};                //第一个数

    char second
= {'\0'};            //第二个数

    char resulte[N+1] = {'\0'};            //第三个数

    int first1 = 0;                        //第一个数组的下标

    int second1 = 0;                    //二

    int resulte1 = 0;                    //三

    int carry = 0;                        //进位数

    

    scanf("%s", first);

    scanf("%s", second);

    first1 = strlen(first) - 1;

    second1 = strlen(second) - 1;

    if (first1 > second1)

    {

        resulte1 = first1;

    }else{

        resulte1 = second1;

    }

    resulte1[resulte1+1]='\0';        //虽然已经初始化,为了保险,同时,可以拓展为循环多几次干这个事情

    while(second1>-1 && first1>-1){

        carry = carry + add1(first[first1],second[second1]);

        resulte[resulte1] = (char)(carry%2 + '0');

        if(carry > 1){

            carry = 1;

        }else{

            carry = 0;

        }

        first1--;

        second1--;

        resulte1--;

    }

    if(first1 > -1){

        while(first1>-1){

            resulte1[resulte1] = first[first1];

            resulte1--;

            first1--;

        }

        carry = 0;

    }else(second1 > -1){

        while(first1>-1){

            resulte1[resulte1] = second[second1];

            resulte1--;

            first1--;

        }

        carry = 0;

    }

    if(carry > 0)

        printf("%d\n", 1);

    printf("%s\n", resulte);

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: