首页 > 其他分享 >高精度加减乘模板

高精度加减乘模板

时间:2023-02-17 12:54:16浏览次数:35  
标签:lenc lenb lena 高精度 int MAX s1 加减 模板


高精度加法 : 

#include <iostream>
#include <cstdio>
#include <cstring>
// 高精度入门
const int MAX = 100005 ;
using namespace std ;
char s[MAX] ;
char s1[MAX] ;
int a[MAX] ,b[MAX] ,c[MAX] ;
void write(int len ,int a[]){ // 高精度输出
for(int i = len ; i>0 ; i-- ){
printf("%d",a[i]);
}
}
int compare(int lena , int lenb){ // 高精度比较
if(lena > lenb) return 1 ;
if(lena < lenb) return 0 ;
for(int i = lena ; i >0 ;i--){
if(a[i]>b[i]) return 1 ;
if(a[i]<b[i]) return 0 ;
}
return 0 ; // a <=b
}

int main(){
int lena , lenb ;
int lenc ;
scanf("%s%s",s+1,s1+1);
lena = strlen(s+1) ;
lenb = strlen(s1+1) ;
for(int i = 1 ; i<=lena ; i++) a[i] = s[lena-i+1]-'0' ;
for(int i = 1 ; i<=lenb ; i++) b[i] = s1[lenb-i+1] -'0' ;
lenc = max(lena,lenb) ;
for(int i = 1 ;i<=lenc ; i++ ){
c[i] = c[i] + a[i]+b[i] ;
c[i+1] = c[i]/10 ;
c[i] = c[i]%10 ;
}
while(c[lenc+1]>0) lenc++ ;
for(int i = lenc ; i> 0 ; i-- ) printf("%d",c[i]);
return 0 ;
}

 高精度减法 : 

#include<cstdio>
#include<cstring>
#include <iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAX = 1000005 ;
int a[MAX],b[MAX],c[MAX];
int lena,lenb,lenc;
char s1[MAX],s2[MAX];
int main(){

scanf("%s %s",s1+1,s2+1);
if(strcmp(s1+1,s2+1)==0 ){ // 相等直接出结果
cout<<"0"<<endl ;
return 0 ;
}
lena=strlen(s1+1);
lenb=strlen(s2+1);
if(lenb>lena||(lena==lenb&&s2>s1)){//如果第二个数比第一个数大,那么结果是负数

printf("-");
int len = max(lena,lenb) ;
char t[MAX] ={'\0'};
for(int i = 0;i<=len ; i++ ){
t[i] = s1[i] ;
}
for(int i = 0 ; i<=len ; i++){
s1[i] = s2[i] ;
}
for(int i = 0 ;i<=len ;i++ ){
s2[i] = t[i] ;
}
swap(lena,lenb);
}
for(int i=1;i<=lena;i++) a[i]=s1[lena-i+1]-'0';
for(int i=1;i<=lenb;i++) b[i]=s2[lenb-i+1]-'0';
lenc=max(lena,lenb);
for(int i=1;i<=lenc;i++){
c[i]=c[i]+a[i]-b[i];
if(c[i]<0) c[i]=c[i]+10,c[i+1] =-1;
}

while(c[lenc]==0&&lenc>1) lenc--;

for(int i=lenc;i>0;i--) printf("%d",c[i]);

}

高精度乘法:

#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAX = 100005 ;
int a[MAX],b[MAX],c[MAX];
int lena,lenb,lenc;
char s1[MAX],s2[MAX];
int main(){

scanf("%s %s",s1+1,s2+1);
if(s1[1]=='0' || s2[1]=='0'){
printf("0\n");
return 0 ;
}
lena=strlen(s1+1);
lenb=strlen(s2+1);
for(int i=1;i<=lena;i++) a[i]=s1[lena-i+1]-'0';
for(int i=1;i<=lenb;i++) b[i]=s2[lenb-i+1]-'0';
lenc=lena+lenb-1;
for(int i=1;i<=lena;i++){
for(int j=1;j<=lenb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}

while(c[lenc+1]>0) lenc++;
for(int i=lenc;i>0;i--) printf("%d",c[i]);
return 0 ;
}

 

标签:lenc,lenb,lena,高精度,int,MAX,s1,加减,模板
From: https://blog.51cto.com/u_15970235/6063955

相关文章

  • MyBatis、LogBack XML文件模板
    xxxMapper模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper......
  • 小程序消息推送之模板订阅
    1、如下所示,订阅自己所需要的模板  2、订阅成功 ......
  • 二分模板
    例题:AcWing789.数的范围原题:使用二分查找数值\(x\)的范围\([l,r)\)。注意:采用左闭右开的方式,这个时候返回右端点时会比最大编号多一,输出时要\(-1\)。而求最小编......
  • PHP 之自定义模板解析
    一、解析列表1、效果图 2、示例代码<?phpinclude_once'parse.func.php';$data=array(array('scode'=>2,'link'=>'https://www.b......
  • 模板的继承
    定义模板:layout.html{%loadstatic%}<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><linkrel="stylesheet"......
  • 服务端技术方案模板参考
    这是一个工程类技术方案模板,基于我之前的一些积累,适合相对独立的需求,实际开发中可以作为一个宽集,在这个基础上进行增加或者删减。一、概要很多时候,大家做项目的时候......
  • 高精度定位技术分析
    高精度定位技术分析关于GPS、RTK、PPK三种定位技术的探讨高精度定位通常是指亚米级、厘米级以及毫米级的定位,从市场需求来看,定位的精度越高往往越好。“高精度、低成本”......
  • 简单计算器加减乘除和undo、redo的设计思路
    1.主要用到的设计模式有单例模式、模板模式、简单工厂模式、委派模式、静态代理模式等2.          ......
  • splay模板
    constexprintN=100005;//ch[i][0]代表左儿子,ch[i][1]代表右儿子intrt,tot,fa[N],ch[N][2],val[N],cnt[N],sz[N];structSplay{voidmaintain(intx......
  • 数论模板
    数学配合oiwiki:https://oi-wiki.org/math/位运算int__builtin_ffs(intx):返回x的二进制末尾最后一个1的位置,位置的编号从1开始(最低位编号为1)。当x为0时......