//调用
//HpDivByShort(str1, p,flag1,flag2);
//-----------------------------
//高精度除以低精度:num表示被除数,p表示除数,(remainder表示余数),is_div为1表示输出商,is_mod为1表示输出余数
const int N=11000;
void HpDivByShort(string num,ll p,int is_div,int is_mod)
{
int len = num.length(), i, s; //字符数据num转化为整型数组nn
ll nn[N];
for(i=0;i<len;i++) nn[i]=num[i]-'0';
ll tmp = 0, rem, tmp_q[max]; //tmp_q存的是商
i=0;
while((i<len)&&(tmp<p)) //准备试商
{
tmp=tmp*10+nn[i];
i++;
}
i--; // 商的位置
s=i; //最高位置i
tmp_q[i]=tmp/p; // 试商
rem= tmp%p; //取余
tmp=rem; // 准备与num的后续数构成新数
nn[i]=tmp_q[i];
while(i<len-1)
{
tmp=tmp*10+nn[i+1];
if(tmp<p)
{
tmp_q[i+1]=0;
}
else
{
rem=tmp%p;
tmp_q[i+1]=tmp/p;
tmp=rem;
}
i++;
}
if(is_mod)
printf("%lld\n",tmp);
for(i=0;i<len-s;i++)
{
tmp_q[i+s]+='0';
if(is_div) printf("%c",tmp_q[i+s]);
}
if(is_div) printf("\n");
return;
}
高精度除以低精度
最新推荐文章于 2022-10-11 18:42:42 发布