两个n位二进制整数相加问题
来源:互联网 发布:金税盘如何备份的数据 编辑:程序博客网 时间:2024/05/19 04:01
(原问题见算法导论第三版2.1-4)
问题:考虑把两个n位二进制数加起来的问题。这两个整数分别存储在两个n元数组A和B中。这两个整数的和应按二进制形式存储在一个(n + 1)元数组C中。
解答:
代码如下。
#include <stdio.h>#include <stdlib.h>#include <string.h>void binary_add(int *, int *, int *, int);int main(int argc, char const *argv[]){ /* code */ if (argc < 3) { fprintf(stderr, "please input enough binary number\n"); return -1; } const char* num1 = argv[1]; const char* num2 = argv[2]; int n1 = strlen(num1); int n2 = strlen(num2); int n = (n1 > n2) ? n1 : n2; int * left = calloc(n1, sizeof(int)); int * right = calloc(n2, sizeof(int)); int * result = calloc(n + 1, sizeof(int)); for (int i = 0; i < n1; ++i) { if (num1[i] == '1') { left[n1 - i - 1] = 1; } else if (num1[i] == '0') { left[n1 - i - 1] = 0; } else { fprintf(stderr, "error input left number, please input binary number\n"); return -1; } } for (int i = 0; i < n2; ++i) { if (num2[i] == '1') { right[n2 - i - 1] = 1; } else if (num2[i] == '0') { right[n2 - i - 1] = 0; } else { fprintf(stderr, "error input right number, please input binary number\n"); return -1; } } for (int i = 0; i < n + 1; ++i) { if (i < n + 1 - n1) { printf(" "); } else { printf("%d", left[n1 - (i - n - 1 + n1) - 1]); } } printf("\n"); for (int i = 0; i < n + 1; ++i) { if (i < n + 1 - n2) { printf(" "); } else { printf("%d", right[n2 - (i - n - 1 + n2) - 1]); } } printf("\n"); binary_add(left, right, result, n); for (int i = 0; i < n + 1; ++i) { printf("%d", result[n - i]); } printf("\n"); return 0;}void binary_add(int *left, int *right, int *result, int n) { int c = 0; int temp; for (int i = 0; i < n; i++) { temp = left[i] + right[i] + c; result[i] = temp % 2; c = temp / 2; } if (c != 0) { result[n] = c; }}
阅读全文
0 0
- 两个n位二进制整数相加问题
- 两个n位二进制整数相加的问题
- 两个n位二进制数相加
- 两个二进制整数二进制不同位个数
- 利用位运算实现两个整数相加
- 位运算实现两个整数相加
- 把两个N位二进制数加起来的问题
- 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。
- 求出两个int(32位)整数m和n的二进制表达中,有多少bit位不同
- C语言实现两个int(32位)整数m和n的二进制表达中找不同位
- 求两个整数相加的进位次数--位运算
- 两个超大整数相加
- 任意两个整数相加
- 两个巨大整数相加
- 两个大整数相加
- 两个整数字符串相加
- 两个超大整数相加
- 两个大整数相加
- Python3 调用Sentec相机SDK方法
- maximum average value
- 超级台阶 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一
- 【Java】Java学习笔记之一 ----面向对象(Object-Oriented)
- Unity中设计模式应用(三):桥接模式
- 两个n位二进制整数相加问题
- java 中 Collection,Iterator,Iterable的简单了解
- 如何搭建个人博客网站(Mac)
- 解决android手机刷新后tabs选项卡出现在浏览器上边的问题
- spark--transform算子--cogroup
- JS、JQuery要点
- 【运营之路】(一)
- python-V
- 禁止控制台打印日志