MirandaMeng
MirandaMeng
采纳率72.7%
2021-03-01 20:22

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

已采纳
#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条回答

  • xianfajushi 智者知已应修善业 1月前

    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

    点赞 评论 复制链接分享