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