- 分享
高精除以高精 代码
- @ 2026-3-7 19:30:21
高精÷高精的代码
#include<bits/stdc++.h>
using namespace std;
int a[10000000],b[10000000],c[10000000],ans[10000000];
bool stringcmp(string a,string b){
if(a.size()<b.size()) return 1;
if(a.size()>b.size()) return 0;
if(a<b) return 1;
else return 0;
}
string stringminus(string a,string b){
string ans;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int down=0;
for(int i=0;i<max(a.size(),b.size());i++){
down+=a[i]-48;
if(i<b.size()) down-=b[i]-48;
ans=char((down+10)%10+48)+ans;
down=((down+10)/10-1);
}
int len=0;
while(ans[len]=='0'){
len++;
}
return ans.substr(len,ans.size()-len+1);
}
int main(){
string as,bs,cmpa;
cin>>as>>bs;
//输入两个大整数
if(as=="0"){
cout<<0;
return 0;
}
//特判
for(int i=1;i<=as.size();i++){
a[i]=as[i-1]-48;
}
for(int i=1;i<=bs.size();i++){
b[i]=bs[i-1]-48;
}
for(int cmpai=0;cmpai<bs.size();cmpai++){
cmpa+=a[cmpai+1]+48;
}
//正序隔位转存到整型数组里
for(int i=1;i<=as.size()-bs.size()+1;i++){
string cmpb,cun="0";
for(int ch=1;ch<=10;ch++){
fill(c,c+10000,0);
for(int j=bs.size();j>0;j--){
c[j]+=b[j]*ch;
c[j-1]+=c[j]/10;
c[j]%=10;
cmpb=char(c[j]+48)+cmpb;
}
cmpb=char(c[0]+48)+cmpb;
int len=0;
while(cmpb[len]=='0'){
len++;
}
cmpb=cmpb.substr(len,cmpb.size()-len);
if(stringcmp(cmpa,cmpb)){
ans[i-2+bs.size()]=ch-1;
break;
}
cun=cmpb;
cmpb="";
}
//记录商
cmpa=stringminus(cmpa,cun);
cmpa+=a[i+bs.size()]+48;
//减法
}
int len=0;
while(ans[len]==0){
len++;
}
for(int i=len;i<as.size();i++){
cout<<ans[i];
}
return 0;
}
可能有些地方写的比较史,嗯对。 然后没了
求夸奖
3 条评论
-
曹莫凡 @ 2026-3-12 21:00:37
🐮✏️
-
@ 2026-3-12 21:00:17
牛b
-
@ 2026-3-8 15:04:53牛b
- 1