高精度除法

C++中数据存储的范围是有限的,最长的longlong型最大只能存储2^63-1。如果要是需要存储更大的数就只能使用数组了。这样存储的数的运算需要另外编写程序。
这里介绍高精度乘法
被除数是高精度数,除数是单精度。
首先,需要先读入数据,被除数当一个字符串读入,再存储到一个整形数组之中,逐位减‘0’,由于除法就是先从最高位开始,就不需要反序了。除数当一个整形数读入即可。
被除数从最高位开始分别去除除数,如果除不了,则将此位的数乘十,累计到下一位;如果除的了,将此位的数减去除数乘十,累计到下一位。注意此处的每一位不一定是只有一位的数,因为有前面的累计。
最后,除0,输出
点击查看 高精度数的四则运算

代码

#include
#include
#include
using namespace std;

const int N=1e5;
string s;
long long int b;
long long int ans[N],a[N];

int main()
{
     
	cin>>s>>b;							//a是被除数  b是除数 
	int len=s.length();	
	for(int i=0;i<len;i++)
		a[i+1]=s[i]-'0';				//反序存储 
	long long int tmp=0;				//所有中间的数都用longlong 
	for(int i=1;i<=len;i++)
	{
     
		a[i]+=tmp*10;					//累计前面剩的数 
		ans[i]=a[i]/b;					//如果不够除,因为都是整形数,就是0 
		tmp=a[i]-ans[i]*b;				//计算剩下的数 
	}
	int i;
	for(i=1;i<len;i++)
		if(ans[i]!=0)					//除0 
			break;
	for(;i<=len;i++)
		cout<<ans[i];					//输出 
	return 0;
}

你可能感兴趣的:(高精度,c++)