二进制数的高精度运算 [复制链接]
发表于 2022-11-29 19:34:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
        我们知道,一个int型整数一般用32位二进制数存储,所表示的最大整数值为 231-1,对应1个10位的十进制整数。因此,一个更大的整数可能需要更多的二进制位来存储,在处理时需要对其进行高精度运算处理。
【例1】二进制加法
问题描述
二进制数相加与十进制数的长加非常相似。与十进制数字一样,从右到左,一次一列地进行各位对应数字的相加。与十进制加法不同,二进制位加法的进位规则是“逢二进一”。
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 10
1 + 1 + 1 = 11
输入
第一行输入是整数N(1≤ N≤ 1000),表示测试用例的组数。之后N行,每行是一组测试用例,其中包含两个由单个空格字符分隔的二进制值。每个二进制值的最大长度为80位(二进制数字)。注:最大长度结果可能是81位(二进制数字)。
输出
对于每组测试用例,在一行中输出测试用例编号、空格和加法的二进制结果。必须省略额外的前导零。
输入样例
3
1001101 10010
1001001 11001
1000111 1010110
输出样例 
1 1011111
2 1100010
3 10011101
       (1)编程思路。
       将二进制数用字符串保存,编写函数void binAdd(char *a,char *b,char *c),完成二进制数C=A+B这一功能。在函数中,先将字符串表示的二进制数A和B分别转换到整型数组X和Y中,转换时注意二进制字符串的最低位(如a[0])对应到数组X的最高位(如x[strlen(a)-1]),二进制字符串的最高位(如a[strlen(a)-1])对应到数组X的最低位(如x[0])。然后将数组X和Y从下标0开始(也是二进制数的个位),逐位对应相加,逢二进一。
       (2)源程序。
[code]#include #include void binAdd(char *a,char *b,char *c){    int len1=strlen(a),len2=strlen(b);    int x[91],y[91],z[91];    int len=len1>len2?len1:len2;    memset(x,0,sizeof(x));    memset(y,0,sizeof(y));    memset(z,0,sizeof(z));    int i;    for (i=len1-1;i>=0;i--)        x[len1-1-i]=a-'0';    for (i=len2-1;i>=0;i--)        y[len2-1-i]=b-'0';    int cf=0;    for (i=0;i=0 && z[len-1]==0)  // 去前置0        len--;    if (len==0)                    // a+b=0时特判    {        c[0]='0';        c[1]='\0';        return ;    }    for (i=0;i=0;i--)    {       if (n1.bitn2.bit)  return 0;    }    return 0;}struct BigNumber minus(struct BigNumber n1,struct BigNumber n2)  // 大数n1 - n2{    struct BigNumber ret;    int i;    ret=n1;    for (i=0;i=0;i--)           printf("%d",n1.bit);    while (b--)       printf("0");    printf("\n");}int main(){    int t,iCase=0;    struct BigNumber n1,n2;    char str1[1005],str2[1005];    scanf("%d",&t);    while (t--)    {        scanf("%s%s",str1,str2);        int i;        n1.len=strlen(str1);        for (i=0;i0 && num1[n-1]==0) n--;    }    for (j=0,i=k-1;i>=0;i--)      {        if (num2
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表