#include<iostream>
#include <string.h>
using namespace std;
int h2d(char c)
{
if(c>='0' && c<='9') return c‐'0';
if(c>='A' && c<='F') return c‐'A'+10;
}
char d2h(int d)
{
if(d>=0 && d<=9) return '0'+d;
if(d>=10 && d<16) return 'A'+d‐10;
}
void add_hex(char A[],char B[],char c[])
{ char r[10];
int la=strlen(A)‐1;
int lb=strlen(B)‐1;
int lr = 0,carry=0,d;
while(lb>=0 && la>=0)
{
d = h2d(A[la‐‐])+h2d(B[lb‐‐])+carry;
if(d>=16)
{ r[lr++] = d2h(d‐16);
carry=1;
}
else
{ r[lr++]=d2h(d);
carry = 0;
}
}
while(la>=0)
{ d = h2d(A[la‐‐])+carry;
if(d>=16)
{ r[lr++] = d2h(d‐16);
carry=1;
}
else
{
r[lr++]=d2h(d);
carry = 0;
}
}
while(lb>=0)
{ d = h2d(A[lb‐‐])+carry;
if(d>=16)
{ r[lr++] = d2h(d‐16);
carry=1;
}
else
{ r[lr++]=d2h(d);
carry = 0;
}
}
if(carry>0)
r[lr++] = '1';
int i=0;
while(‐‐lr>=0)
c[i++] = r[lr];
c[i] = '\0';
}
没有看明白这段代码
比如CB9+957
则strlen(A)和strlen(B)都是3 la lb都是2 则进入while 第一次是d = h2d(A[1])+h2d(B[1])+carry;也就是d=h2d(B)+h2d(5) +0=16
按照这样的情况运行无法得到正确答案
请问我是哪里理解错了
9+7=16产生一个进位1,(B+5)+1=17也产生一个进位1,(C+9)+1=22也产生一个进位1
结果是1610,上述运算依位16求余0,1,6
第一次取9+7不是你说的B+5,你再仔细分析.
十六进制加法是这样运算的,至于程序就写法有不同,不做分析了.
我写的程序测试4组数据CB9 957 CB9 4957 7CB9 957 47CB9 957