高精度算法

1.高精度算法

大数运算的实质就是用数组代替变量进行竖式运算

个位 十位 百位
a[1] a[2] a[3] 
b[1] b[2] b[3] 
c[1] c[2] c[3] 

1.1高精度加法

  1. c[1] += a[1]+b[1];//求和
  2. c[2] +=c[1]/10;//进位
  3. c[1] %= 10;//更新数位

高精度求和例题

1.2高精度减法

  1. 保证a>b 否则交换
  2. 若同为相减小于0,则数位+10,高位-1
  3. 同数位作差

高精度减法例题

1.3高精度乘法

  1. b的每个数位都要乘一遍a,双for遍历a,b
  2. 每当b的数位往前+1,保存乘积的c下标应当相应的+1
  3. 求和
  4. 进位
  5. 更新
    乘法例题
    示例代码
#include<bits/stdc++.h>
using namespace std;
string A,B;
int a[100005],b[100005],c[100005];
int la,lb,lc;
int main()
{
 cin >> A >> B;//因子
 la=A.length();lb=B.length();
 reverse(A.begin(),A.end());
 reverse(B.begin(),B.end()); 
 for(int i=1;i<=la;i++){
  a[i] = A[i-1]-'0';
 }
 for(int i=1;i<=lb;i++){
  b[i] = B[i-1]-'0';
 }
 for(int i=1;i<=la;i++){//模拟竖式运算
  for(int j=1;j<=lb;j++){
   c[i-1+j] += b[j]*a[i];
   c[i+j] += c[i+j-1]/10;
   c[i+j-1] %= 10;
  }
 }
 lc = la+lb;
while(!c[lc] && lc>1){//消去前导0 
  lc--;
 }
 for(int i=lc;i>=1;i--){//输出
  cout << c[i];
 }
 return 0;
}

1.4高精度进制转换

  1. 判断是否是数字(高进制出现字母)
  2. 将字母转换成对应数 如:B-65+10
  3. 改变进位规则
  4. 注意输出时大于9的数换成字母输出
    例题
    示例代码
#include<bits/stdc++.h>
using namespace std;
int b,t[20000],k[20000],res[20000];
int main()
{
 string x,y;
 cin >> b >> x >>y;
 int len = max(x.length(),y.length());
 reverse(x.begin(),x.end());
 reverse(y.begin(),y.end());
 for(int i=0;i<x.length();i++){
  if(!isdigit(x[i])){
   t[i] += x[i] - 65 +10;
  }else{
   t[i] = x[i] - '0';
  }
 }
 for(int i=0;i<y.length();i++){
  if(!isdigit(y[i])){
   k[i] = y[i] - 65 +10;
  }else{
   k[i] = y[i] - '0';
  }
 }
 for(int i=0;i<len;i++){
  res[i] += (t[i] + k[i]);
  res[i+1] = res[i]/b;
  res[i] %= b;
 }
 int i=len;
 while(1){
  if(res[i]||i==0){
   break;
  }
  i--;
 }
 for(int j=i;j>=0;j--){
  if(res[j]<=9)
   cout << res[j];
  else{
   cout << char(res[j]-10+65);
  }
 }
 return 0;
}
1.5除法

高精度除法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值