一个非常简单易懂的题解
2026-08-18 15:14:34
发布于:河南
4阅读
0回复
0点赞
其实难点主要在如何除下去和去前导零
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5;
string x;
ll y;
ll mod;
ll a[N],b[N],ans[N];
int main(){
cin>>x>>y;
//这里的可以不用反转reverse
//直接模拟人类的手算竖式除法即可
for(ll i=0;i<x.size();i++)a[i]=x[i]-'0';//正常存储
for(ll i=0;i<x.size();i++){
mod=mod*10+a[i];//常规操作,单拎出来这一步要计算的部分
ans[i]=mod/y;//每一步都均匀地除过去
mod%=y;//这里存储余数
}
ll t=0;//因为没有反转,所以前导零其实在前面,我们把t从最小的开始
while(ans[t]==0){//只要前导零没有去完就一直循环
t++;//把答案的头部往后挪,前导零的部分直接不要
}
for(ll i=t;i<x.size();i++)cout<<ans[i];//输出
cout<<"\n";
cout<<mod;//输出余数
return 0;
}
全部评论 1
在while循环去除前导零那里的条件多补一个t<x.size()-1,防止最后一位丢失
昨天 来自 河南
0



有帮助,赞一个