资源简介
二进制加减法,多种乘法方式实现二进制乘法。
代码片段和文件信息
#include
#include
#define MAX_LEN 20
int init(int *Aint *B)
{
int in;
while(1==scanf(“%d“&n))
if(n > 0) break;
for(i=MAX_LEN-n;i < MAX_LEN;i++)
scanf(“%d“A+i);
for(i=MAX_LEN-n;i < MAX_LEN;i++)
scanf(“%d“B+i);
return n;
}
void bits_display(int *Aint n)
{
for(int i=MAX_LEN-n;i printf(“%d“A[i]);
printf(“\n“);
}
int bits_add(int *Aint *Bint *Cint n)
{
int icarrylen;
for(i=MAX_LEN-1carry=0;i>=MAX_LEN-n;i--)
{
C[i]=A[i]+B[i]+carry;
if(C[i] >= 2)
{
carry=1;
C[i]=C[i]%2;
}
else
carry=0;
}
len=n;
if(carry){ C[i]=carry;len++;}
return len;
}
void bits_sub(int *Aint *Bint *Cint n)
{//A>B A-B
int icarry;
for(i=MAX_LEN-1carry=0;i>=MAX_LEN-n;i--)
{
C[i]=A[i]-B[i]-carry;
if(C[i] < 0)
{
carry=1;
C[i]+=2;
}
else
carry=0;
}
C[i]=A[i]-carry;
}
int bits_multi(int *Aint *Bint *Cint n) //a*b(n bits)
{
if(n==1)
C[MAX_LEN-1]=A[MAX_LEN-1]*B[MAX_LEN-1];
else{
int a[MAX_LEN]={0}b[MAX_LEN]={0}c[MAX_LEN]={0}d[MAX_LEN]={0};
int ijmid;
if(n%2) n++;
mid=n/2;
for(i=MAX_LEN-mid-1j=MAX_LEN-1;i >= MAX_LEN-n;i--j--)
{
a[j]=A[i];
c[j]=B[i];
}
for(i=MAX_LEN-1;i >= MAX_LEN-mid;i--)
{
b[i]=A[i];
d[i]=B[i];
}
int ac_lenbd_len;
int ac[MAX_LEN]={0}bd[MAX_LEN]={0}a_bc_d[MAX_LEN]={0}ab_cd[MAX_LEN]={0}ac_bd[MAX_LEN]={0};
ac_len=bits_multi(acacn-mid);
bd_len=bits_multi(bdbdmid);
int a_b[MAX_LEN]={0}c_d[MAX_LEN]={0};
int a_b_lenc_d_lena_bc_d_lenac_bd_len;
a_b_len=bits_add(aba_bn-mid);
c_d_len=bits_add(cdc_dmid);
a_bc_d_len=bits_multi(a_bc_da_bc_d(a_b_len>c_d_len?a_b_len:c_d_len));
ac_bd_len=bits_add(acbdac_bd(ac_len>bd_len?ac_len:bd_len));
bits_sub(a_bc_dac_bdab_cd(a_bc_d_len > ac_bd_len?a_bc_d_len : ac_bd_len));
for(i=MAX_LEN-2*n;i if(i else ac[i]=0;
}
for(i=MAX_LEN-n-mid;i if(i else
ab_cd[i]=0;
}
bits_add(acbdC2*n);
bits_add(ab_cdCC2*n);
}
return 2*n;
}
int main()
{
int A[MAX_LEN]B[MAX_LEN];
int C[2*MAX_LEN]={0};//store result
int n=init(AB);
printf(“A:“);bits_display(An);
printf(“B:“);bits_display(Bn);
bits_multi(ABCn);
printf(“A*B:“);bits_display(C2*n);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2446 2011-09-07 15:41 bits_multi.cpp
文件 5863 2015-12-10 17:36 c语言课程设计二进制计算器.c
文件 525 2015-12-10 17:48 二进制乘法.txt
文件 6876 2015-12-10 17:49 二进制乘法2.txt
- 上一篇:crm vc++源代码
- 下一篇:C语言编程流程图自动生成
相关资源
- C语言编程流程图自动生成
- 赫夫曼编码(C语言编写
- 用C语言实现ARC圆弧插补计算
- 基于TMS320VC5416的DTMF双音多频发生与检
- 阅览室问题C语言实现
- c++ c 数据结构 课程设计 学生成绩管理
- C语言编写的高精度求积分函数
- 使用c语言实现图像二值化
- c语言实现的自动贩卖机程序
- 人事管理系统C语言课程设计报告
- C语言 马踏棋盘 完整代码及实验报告
- C语言 图书馆借阅管理系统 完整代码
- UDP协议客户端服务器间视频传输c源码
- 基于51单片机的c语言编写的计算器程
- 简单时间获取,用c语言编写,客户端
- C语言课程设计 - 学生宿舍管理系统
- C语言大作业 西北工业大学
- 3DES,C语言版,ECB,PKCS7
- 利用LINUX FIFO命名管道技术实现双向聊
- C语言学生宿舍管理程序源代码
- kcf目标跟踪C代码
- 围棋C语言代码要满十字
- 逆波兰表达式 c语言实现
- 指法练习 C语言源代码
- 人工智能 八数码问题 A*算法 C语言
- 全国交通咨询模拟c语言版214055
- 基于C语言STC89C52单片机电子密码锁的
- C语言实现 简单的端口扫描
- C语言课程设计——超市商品库存管理
- RSA算法1024位C语言实现
评论
共有 条评论