| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4369 人关注过本帖
标题:c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做最低位 ...
只看楼主 加入收藏
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
 问题点数:0 回复次数:12 
c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做最低位的加数
c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做最低位的加数
搜索更多相关主题的帖子: c语言 
2011-06-05 15:10
baobaoisme
Rank: 7Rank: 7Rank: 7
来 自:AVATAR
等 级:黑侠
帖 子:260
专家分:506
注 册:2010-7-9
收藏
得分:0 
用两个数组相加实现即可
2011-06-05 15:27
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
没看懂

My life is brilliant
2011-06-05 16:13
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
关键是前面最高位溢出的时候,要求把溢出的进位当加数,没溢出的部分和是正确的
2011-06-06 09:52
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
最好按二楼办法来
2011-06-06 12:17
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
回复 5楼 voidx
能说的详细点么?很朦胧啊
2011-06-06 13:53
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
回复 6楼 gao_guai
举个例子好吗?没看懂啥意思。
2011-06-06 13:58
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
比如:char a=125,b=3,c;c=a+b;此时c应该溢出了,但是我要的结果是1,(01111101+00000011=100000000,将前面这个1再加到最低位得到1)
2011-06-06 14:38
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
//下面的代码可以用数组进行二进制数的逐位相加。至于楼主的要求,只要在加法运算结束后检查最高位,然后采取相应处理就可以了。
//楼主先自己看看,不明白我再给你解释。代码写的可能有点啰嗦,楼主将就着看吧

#include <stdio.h>
#include <string.h>

void reverse(char * a) {
    int i = 0, j = strlen(a) - 1;
    char k;
    while (i < j) {
        k = a[i];
        a[i++] = a[j];
        a[j--] = k;
    }
}

void add_binary(char * r, char * a, char * b) {
    char i = 0, c = '0', la = strlen(a), lb = strlen(b);
    reverse(a);        // 反转数组,方便进行加法运算
    reverse(b);
    if (la < lb) {    // 对齐两个数组的长度
        memset(&a[la], '0', lb - la);
    } else {
        memset(&b[lb], '0', la - lb);
    }
    while (a[i]) {    // 对两个二进制数逐位相加
        if (a[i] == b[i]) {
            r[i] = c;
            c = a[i];
        } else {
            r[i] = c == '1' ? '0' : '1';
        }
        i++; 
    }
    if (c == '1') {
        r[i] = '1';
    }
    reverse(r);
    if (la < lb) {    // 恢复在进行对齐时修改过的数组的长度
        a[la] = 0;
    } else {
        b[lb] = 0;
    }
}

int main() {
    int i, j;
    char ia[32] = {0}, ja[32] = {0}, suma[33] = {0};
    printf("Give me 2 integers: ");
    scanf("%d %d", &i, &j);
    itoa(i, ia, 2);
    itoa(j, ja, 2);
    add_binary(suma, ia, ja);
    printf("%s\n", suma);
    return 0;
}


[ 本帖最后由 voidx 于 2011-6-6 15:37 编辑 ]
2011-06-06 14:55
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
回复 9楼 voidx
对两个二进制数逐位相加的思想是什么,没看懂
2011-06-06 15:57
快速回复:c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017942 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved