搜索内容

有一个问题?

如果您有任何疑问,可以在下面询问或输入您要寻找的!

C++将两字符串中的十六进制整数相加,结果放在另一个字符串中

技术聚客 未结 1 637
MirandaMeng
MirandaMeng 2021-03-02 08:32
#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

按照这样的情况运行无法得到正确答案

请问我是哪里理解错了

相关标签:
1条回答
  • 2021-03-02 09:28

    9+5=16产生一个进位1,(B+5)+1=17也产生一个进位1,(C+9)+1=22也产生一个进位1

    结果是1610

    0 讨论(0)
提交回复