上次Seele酱讲过了高精度的加减法,这次我又带来了高精度的乘除法,请慢用~
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
char n1[9999],n2[9999];
int z[99][99]={0};
int s1[9999],s2[9999],s3[9999]={0},f;
int main()
{
int i,l,nx,ny,jw=0,w,n;
cin>>n1>>n2;
nx=strlen(n1);//读入字符串长度
ny=strlen(n2);
int y=max(nx,ny);//计算数位最大值
for(i=0;i<nx;i++)
{
s1[i]=n1[nx-1-i]-'0';//输入一个数
}
for(i=0;i<ny;i++)
{
s2[i]=n2[ny-1-i]-'0';//另一个数
}
for(n=0;n<=nx;n++)
{
for(w=0;w<=ny;w++)
{
s3[w+n]+=s1[n]*s2[w];//做乘法
if(s3[w+n]>=10)//判断进位情况
{
s3[w+n+1]+=s3[w+n]/10;//加上进位得数
s3[w+n]=s3[w+n]%10; //减去进位所需的数
}
}
}
f=nx+ny;
while(s3[f]==0&&f>0) f--;//把0统统消掉~
for(i=f;i>=0;i--) cout<<s3[i];
}
除法的实现比较难一点.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[10001];
long long b,l;
long long c[10001],ans[10001];
int main() {
gets(a);//接收char,之后转成int
l=strlen(a);//记录长度
cin>>b;
int n=0;
for (int i=1; i<=l; i++) {
if (isdigit(a[l-i])) {//判定是否是个数字
n++;
c[n]=a[l-i]-'0';//倒序存储并转为int
}
}
while (c[n]<b&&l>=1) {//不够除借位
c[n-1]=c[n-1]+c[n]*10;
c[n]=0;
n--;
}
for (int i=n;i>=1;i--) {
if (c[i]>=b) {
ans[i]=c[i]/b;//开始除法
c[i]=c[i]%b;
}
c[i-1]=c[i-1]+c[i]*10;//把除不尽的加到下一位
}
for (int i=n;i>=1;i--) cout<<ans[i];//输出
}