高精度除以低精度


//調用 
//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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章