//調用
//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;
}
高精度除以低精度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.