C++中高精度除以高精度(函数)


#include<iostream>
#include<string>
#include<cstring> 
using namespace std;
int a[201], b[201], c[201];

//输入
void init(int a[]) {
 string s;
 cin >> s;
 a[0]=s.length();
 for (int i=1; i<=a[0]; i++) {
  a[i]=s[a[0]-i]-48;
 }

 
//输出
void print(int a[]) {
 if (a[0]<=0) {
  cout << 0 << endl;
  return;
 }
 for (int i=a[0]; i>0; i--) {
  cout << a[i];
 }
 cout << endl;
 return;

//比较函数
int compare(int a[], int b[]) {
 if (a[0]>b[0]) 
  return 1;
 if (a[0]<b[0])
  return -1;
 for (int i=a[0]; i>0; i--) {
  if (a[i]>b[i])
   return 1;
  if (a[i]<b[i])
   return -1;
 }
 return 0;
}

//减法运算
void jian(int a[], int b[]) {
 int flag;
 flag=compare(a,b);
 if (flag==0) {
  a[0]=0;
  return;
 }
 if (flag==1) {
  for (int i=1; i<=a[0]; i++) {
   if (a[i]<b[i]) {
    a[i+1]--;
    a[i]+=10;
   }
   a[i]-=b[i];
  }
  while (a[0]>0 && a[a[0]]==0) {
   a[0]--;
  }
  return;
 }

//函数补0
void numcpy(int p[], int q[], int det) {
 for (int i=1; i<=p[0]; i++) {
  q[i+det-1]=p[i];   
 }
 q[0]=p[0]+det-1;

 
//高精度除法运算
void chugao(int a[], int b[], int c[]) {
 int tmp[201];
 c[0]=a[0]-b[0]+1;
 for (int i=c[0]; i>0; i--) {
  memset(tmp, 0, sizeof(tmp));//替换
  //补0操作
  numcpy(b, tmp, i);
  while (compare(a, tmp)/*比较俩个数字大小*/>=0) {
   c[i]++;
   jian(a, tmp);//两数相减 
  }
 }
 while (c[0]>0 && c[c[0]]==0) {
  c[0]--;
 } 
 return;

 
int main() {
 init(a);//输入 
 init(b);
 chugao(a, b, c);//计算 
 print(c);//输出商 
 print(a);//输出余数 
 return 0;
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俺俺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值