4 条题解
-
-1
#include <iostream> using namespace std; const int Maxn=100; int a[Maxn],b[Maxn],c[Maxn]; int lena, lenb, lenc, t; int main() { string s1,s2; cin>>s1>>s2; //s1,s2为十六进制字符串值,如:s1=(B90)H, s2=(80)H lena=s1.length()-1; lenb=s2.length()-1; //lena: 数据a的最高权位,对应数值a实际存储下标:[0..lena] lenc=max(lena, lenb)+1; //lenc: 数据a+b, 产生结果c的最大可能权位,实际也可能是lenc-1 for(int i=0; i<=lena; i++){ //1. 将s1字符串转存入数组a[]中, 考虑到高位可以拓展, 因此最低位放在0位置 if('0'<=s1[i] and s1[i]<='9') t=s1[i]-48; else t=s1[i]-'A'+10; a[lena-i]=t; } for(int i=0; i<=lenb; i++){ if('0'<=s2[i] and s2[i]<='9') t=s2[i]-48; else t=s2[i]-'A'+10; b[lenb-i]=t; } for(int i=0; i<=lenc; i++){ //2. 将数据a与数据b按对应位置相加 c[i]=a[i]+b[i]; } for(int i=0; i<=lenc; i++){ //3. 将各个位置数据, 从低位到高位, 依次整理成16进制数值(0..15) c[i+1]+=c[i]/16; c[i]%=16; } if(c[lenc]==0) lenc--; // 最高位lenc值为0, 则不存在,进行退位 for(int i=lenc; i>=0; i--){ //4. 从高位到低位, 依次输出高精度数据c[lenc..0] if(c[i]>=10){printf("%c",c[i]+55);} else{printf("%d",c[i]);} } return 0; }
信息
- ID
- 98
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 354
- 已通过
- 84
- 上传者