很直观的解法,遇到特殊内容就定义函数完成
2024-04-25 14:57:36
发布于:湖北
65阅读
0回复
0点赞
思路是这样的:
先定义一个高精加函数
然后在具体到每一位数字的时候
又定义了一个B进制相加的函数,进行相加
注:最后一个测试案例的两个数字前面居然有个0
这不坑人吗
#include <bits/stdc++.h>
using namespace std;
char a[4000],b[4000],c[4000];
int n;
char num[36]={
'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z'
};
int bj(char char1,char char2,int d)//B进制相加,得出结果,注意结果是整数类型
{
int n1,n2;
if('0'<=char1 and char1 <= '9')
{
n1 = char1 - '0';
}
else if ('A'<=char1 and char1 <= 'Z'){
n1 = char1 - 'A' + 10;
}
else{
n1 = 0;
}
if('0'<=char2 and char2 <= '9')
{
n2 = char2 - '0';
}
else if ('A'<=char2 and char2 <= 'Z'){
n2 = char2 - 'A' + 10;
}
else{
n2 = 0;
}
return n1+n2+d;
}
string adds(string s1,string s2)
{
for(int i=0;i<s1.length();i++)
{
a[i] = s1[s1.length()-1-i];
}
for(int i=0;i<s2.length();i++)
{
b[i] = s2[s2.length()-1-i];
}
int d=0;
int lang = max(s1.length(),s2.length());
for (int i=0;i<lang ;i++)
{
int q=bj(a[i],b[i],d);
if(q>=n)
{
d=1;
}
else
{d=0;}
c[i]=num[q%n];
}
if(d!=0){
c[lang]=num[d];
}
else{
lang--;
}
string s3="";
int i=lang;
for(;c[i]=='0';i--);
for(;i>=0;i--)
s3+=c[i];
return s3;
}
int main()
{
cin>>n;
string m1,m2;
cin>>m1>>m2;
cout<<adds(m1,m2);
return 0;
}
全部评论 2
不信?去问Chatgpt4.0
2024-06-17 来自 广东
0有0是因为那是十六进制是有0在前面,没办法,数学就是这样的.
2024-06-17 来自 广东
0
有帮助,赞一个