首页 > 其他分享 >高精度运算

高精度运算

时间:2024-07-28 16:00:17浏览次数:13  
标签:运算 高精度 int 100000 n3 nn2 nn1 l3

高精度运算 高精度算法是一种模拟算法

由于操作的对象为很大的数 我们可以使用字符串 字符串在C++有三种定义方式:

char a[100];
char *b;
string c;

对于string, 我们可以到oi-wiki进行查询

高精度算法的本质是竖式运算 为了使运算简单,我们使用vector vector的定义为:

vector<type> a; 对于vector, 我们可以到oi-wiki进行查询

通过以上的算法基础,我们可以列出一个大纲

使用字符数组存储数字 将字符数组转换成整型数组 循环相加,以位数最多者的位数作为次数 处理进位 判断最后的进位是否舍弃,并逆序输出 以下为本蒟蒻的高精度计算代码 加法

#include <bits/stdc++.h>
using namespace std;

int n1[100000],
    n2[100000],
    n3[100000];
int l1, l2, l3;
string nn1, nn2;

int main() {
    cin >> nn1 >> nn2;

    l1 = nn1.length();
    l2 = nn2.length();
    l3 = max(l1, l2);

    for(int i=0; i<l1; i++) 
        n1[l1-i-1] = nn1[i]-'0'; 
    for(int i=0; i<l2; i++) 
        n2[l2-i-1] = nn2[i]-'0'; 

    for(int i=0; i<l3; i++) {
        if(n3[i]+n2[i]+n1[i] > 9) {
            n3[i] += n1[i]+n2[i]-10;
            n3[i+1] ++;
        }else{
            n3[i] += n1[i]+n2[i];
        }
    }

    if(n3[l3]) l3++;
    for(int i=l3-1; i>=0; i--) 
        cout << n3[i];

    return 0;
}

减法

#include <bits/stdc++.h>
using namespace std;

int n1[100000],
    n2[100000],
    n3[100000];
int l1, l2;
string nn1, nn2;

int main() {
    cin >> nn1 >> nn2;

    l1 = nn1.length();
    l2 = nn2.length();

    if(l1<l2 || (l1==l2 && nn1<nn2)) {
        cout << "-";
        swap(l1, l2);
        swap(nn1, nn2);
    }

    for(int i=0; i<l1; i++) 
        n1[l1-i-1] = nn1[i]-'0'; 
    for(int i=0; i<l2; i++) 
        n2[l2-i-1] = nn2[i]-'0'; 

    int i;
    for(i=0; i<l1; i++) {
        n3[i] = n1[i]-n2[i];
        if(n3[i] < 0) {
            n3[i]+=10;
            n1[i+1]--;
        }
    }

    while(n3[i]==0 && i>0) i--;
    for(; i>=0; i--) 
        cout << n3[i];

    return 0;
}

乘法

#include<iostream>
#include<string>
using namespace std;

string nn1, nn2;
int n1[100000],
    n2[100000],
    n3[100000];
int l1, l2, l3;

int main () {
    cin>>nn1>>nn2;
    l1=nn1.length();
    l2=nn2.length();
    l3=l1+l2;

    for(int i=1; i<=l1; i++)
        n1[i]=nn1[l1-i]-'0';
    for(int i=1; i<=l2; i++)
        n2[i]=nn2[l2-i]-'0';

    for(int i=1; i<=l2; i++) 
        for(int j=1; j<=l1; j++)
            n3[i+j-1]+=n1[j]*n2[i];
    for(int i=1; i<l3; i++) 
        if(n3[i]>9) {
            n3[i+1]+=n3[i]/10;
            n3[i]%=10;
        }

    while(n3[l3]==0&&l3>1) l3--;
    for(int i=l3; i>=1; i--) cout<<n3[i];
    return 0;
}

除法

 #include <bits/stdc++.h>
using namespace std;

string x;
long long b;
long len, last = 0, y = 0;
int  a[10000000], res[10000000];
int main() {
    cin >> x >> b;

    len = x.length();
    for (int i = 0; i < len; i++)
        a[i] = x[i] - '0';

    for (int i = 0; i < len; i++) {
        res[i] = (y * 10 + a[i]) / b;
        y = (y * 10 + a[i]) % b;
    }

    while (res[last] == 0 && last < len - 1) last++;
    for (int i = last; i < len; i++) cout << res[i];
    return 0;
}

标签:运算,高精度,int,100000,n3,nn2,nn1,l3
From: https://blog.csdn.net/p605779/article/details/140751803

相关文章

  • 嵌入式学习第五天:逻辑运算、选择语句...
    目录c语言流程控制关系运算符逻辑运算符&&逻辑与||逻辑或判断闰年!逻辑非逻辑表达式选择语句if语句形式1形式2形式3条件运算switch语句c语言流程控制顺序结构选择结构(分支结构)循环结构任何一个程序都是由这三种结构组合而成。通过比较提供判断的依据,进......
  • JAVA基础 - 运算符
    目录一.简介二.算术运算符二.自加,自减三. 算术赋值运算符四.关系运算符五.逻辑运算符六.位运算符七.其他运算符八.运算优先级一.简介在Java中,运算符用于对数据进行各种运算操作。以下是一些常见的Java运算符:算术运算符:+ :加法- :减法* :乘法/ ......
  • python错题记录:布尔运算与逻辑值检测
    一前言环境:python3.10win10二布尔运算与逻辑值检测1案例案例1如上,在布尔运算时,有些时候代码只会运算前面的一部分,剩下的部分根本不会运算。以前在练习算法代码时,就利用这个规则来减少代码的工作量案例2如上,之前好长一段时间,上面的布尔运算总是让我感到困惑布尔运......
  • Java运算符
    目录1.java运算符 运算符介绍2.算术运算符 算术运算符一览案例演示: /与%代码示例与讲解 前++与后++代码示例与讲解例题3.关系运算符(比较运算符) 关系运算符一览 案例演示: 4.逻辑运算符 逻辑运算符一览逻辑运算符规则 &&和&基本规则||和|基本规则!取反......
  • Greenplum数据库中的集合运算
    这些集合运算在Greenplum数据库中广泛应用于数据处理和分析任务中。通过合理运用并集、交集和减集操作,可以对数据集进行灵活的合并、比较和筛选,满足不同的数据需求。并集(UNION):并集操作用于合并两个或多个数据集,返回一个包含两个数据集中所有唯一值的结果集。在Greenplum数据......
  • 【运算放大器】输入失调电压和输入偏置电流(1)理论与仿真
    概述总结运算放大器的输入失调电压和输入偏置电流基本理论,并进行仿真验证。理论部分主要参考《你好,放大器初识篇》。文章目录概述一、输入失调电压(OffsetVoltage,Vos)二、失调电压漂移(OffsetVoltageDrift)三、输入失调电流(Inputoffsetcurrent,Ios)四、输入偏置电流(I......
  • JavaScript 运算符表格
    JavaScript算数运算符算数运算符用于对数字执行算数运算:运算符描述+加法-减法*乘法/除法%取模(余数)++递加--递减JavaScript赋值运算符赋值运算符向JavaScript变量赋值。运算符例子等同于=x=yx=y+=x+=yx=x+......
  • 嵌入式小白第三天——数据类型 运算符 表达式
    目录运算符表达式运算符1.运算符的优先级和结合性2.运算的对象的个数3.表达式4.算术运算(+-*/%)/号%号5.自增运算符与自减运算符(++--)a++与++a区别左值与右值问题6.赋值运算7.逗号运算(顺序求值运算)8.强制类型转换9.隐式类型转换10.不同类型间的混合赋值......
  • java位运算
    位运算符:针对二进制的值补码形式进行计算的&|^(相同为0,不同为1)~<<>>>>>publicclassWeiOptDemo1{publicstaticvoidmain(String[]args){bytea1=3;byteb1=4;System.out.println(a1&b1);System.out.println(a1|b1);System.o......
  • 基础数论 模运算与逆元
    模运算与逆元:取模定义:\[a\bmodn\begin{cases}a-\lfloor\frac{a}{n}\rfloor\timesn\\\\\a\geq0\\-(-a\bmodn)\\\a<0\end{cases}\]取模基本性质:设\(a_0=a\bmodn,b_0=b\bmodn\)\((a+b)\bmodn=((a\bmodn)+(b\bmodn))\bmodn\)......