东莞seo建站视频,软件代理商招募,好搜seo软件,响应式wordpress商城例题 分析
输入
本题解题关键在于输入的两个数位数不同时候需要尾数对齐#xff0c;由于是16进制输入#xff0c;含有字母#xff0c;需要当作字符串输入#xff0c;当然输出也要字母#xff0c;那么就需要我们的两个老伙计了#xff0c;一个是map#xff0c;另一个是…例题 分析
输入
本题解题关键在于输入的两个数位数不同时候需要尾数对齐由于是16进制输入含有字母需要当作字符串输入当然输出也要字母那么就需要我们的两个老伙计了一个是map另一个是自己定义char和int互转的函数map有点麻烦我们这里还是用自定义函数。
个位对齐
将输入的char数组转换成string从而能够很容易的求出数组的长度对比两个字符串的长度取小的那个长度作为接下来循环相加所得子串target的长度循环相加时候每个字符数组都从各自length-1的位置开始取数
循环相加
经过个位对齐取完字符后将两数字符转成相应数字两个数字相加所得之和对16取余取余结果转换成字符不断拼入一个字符串target中每次完成依次上述三个操作就将当前位置为’\0’然后再赋给string以便下一轮while计算长度这一步的目的是让字符串长度都减去1重复上述4个操作直到其中一个数组长度为0
输出结果
先找出上面两个字符数组中非空的一个输出这个数组是正序的且是高位应该先输出再倒序输出target串这个串是低位倒序需要后输出
代码来咯
#include cstdio
#include map
#include string
#include cmath
#include vector
#include algorithm
#include stack
using namespace std;int real_num(char num){if(num9num0){return num-0;}else if(numfnuma){return num-a10;}else if(numFnumA){return num-A10;}return -1;
}int real_char(int num){if(num9){return num0;}else{return num-10A;}
}int main(){char num_1[1000];char num_2[1000];while(scanf(%s%s,num_1,num_2)!EOF){string n_1 num_1;string n_2 num_2;string target ;int m_length min(n_1.length(),n_2.length());while(n_1.length()0n_2.length()0){int n1 real_num(num_1[n_1.length()-1]);int n2 real_num(num_2[n_2.length()-1]);num_1[n_1.length()-1] \0;num_2[n_2.length()-1] \0;target real_char((n1n2)%16);n_1 num_1;n_2 num_2;}if(n_1.length()0){printf(%s,n_1.c_str());}if(n_2.length()0){printf(%s,n_2.c_str());}for(int im_length-1;i0;i--){printf(%c,target[i]);}printf(\n);}return 0;
}