原理很简单,就是把高精度加法和高精度除法拼在一起。
AC代码:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char s1[100001],s2[100001];
int a1[100001],a2[100001],c[10001],s3=2,res[10001];
int main()
{
cin>>s1>>s2;
int len1=strlen(s1);
int len2=strlen(s2);
for(int i=0;i<len1;i++){
a1[len1-1-i]=s1[i] -'0';
}
for(int i=0;i<len2;i++){
a2[len2-1-i]=s2[i] -'0';
}
int maxlen=len1>len2?len1:len2;
int jw=0;
for(int i=0;i<maxlen;i++){
c[i]=a1[i]+a2[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
if(jw>0){
c[maxlen]=jw;
maxlen+=1;
}
for(int i=0;i<maxlen;i++){
s1[i]=c[maxlen-1-i]+'0';
}
len1=strlen(s1);
for(int i=0;i<len1;i++){
a1[i] = s1[i]-'0';
}
int ys=0;
for(int i=0;i<len1;i++){
res[i]=(ys*10+a1[i])/s3;
ys=(ys*10+a1[i])%s3;
}
int index=0;
for(int i=0;i<len1;i++){
if(res[i]!=0){
index=i;
break;
}
}
for(int i=index;i<len1;i++){
cout<<res[i];
}
return 0;
}