首页 > 其他分享 >高精度加法、减法、乘法【自存】

高精度加法、减法、乘法【自存】

时间:2023-04-17 14:37:35浏览次数:35  
标签:自存 tem int Max jw len -- 加法 减法

预处理

int Max_len;     // 最多可能的位数

string a, b;

void init() {
    cin >> a >> b;
    Max_len = 500;     //
    int ind = Max_len, i = a.size() - 1;
    while(i >= 0) {
        ans[ind] = a[i] - '0';
        ind--; i--;
    }
    ind = Max_len, i = b.size() - 1;
    while(i >= 0) {
        tem[ind] = b[i] - '0';
        ind--; i--;
    }
    return;
}

高精度加法

void add(int a[], int b[]) {   
    int jw = 0;
    for(int i = Max_len; i >= 0; i--) {
        a[i] += jw + b[i];
        jw = a[i] / 10;
        a[i] %= 10;
    }
    return;
}

int main() {
    // init()
    add(ans, tem);
    bool f = 0;
    for(int i = 0; i <= Max_len; i++) {
        if(!f && (ans[i] || i == Max_len)) f = 1;
        if(f) 
            printf("%d", ans[i]);
    }puts("");
}

高精度减法

void sub(int a[], int b[]) {   // 
    int jw = 0;
    for(int i = Max_len; i >= 0; i--) {
        a[i] = a[i] + jw - b[i];
        if(a[i] < 0) {
            a[i] += 10;
            jw = -1;
        }
        else jw = 0;
    }
    return;
}

int main() {
    sub();
    bool f = 0;
    for(int i = 0; i <= Max_len; i++) {
        if(!f) {
            if(i == Max_len) {
                f = 1;
            }
            else if(ans[i]) {
                f = 1;
                if(fh) printf("-");     // fh : a < b 的 flag 
            }
        }
        if(f) 
            printf("%d", ans[i]);
    }puts("");
}

高精度乘法

// 高精 * 高精
void mul1(int a[], int b[], int c[]) {      // c = a * b
    for(int i = Max_len; i >= 0; i--) {     /// b[i] * 10^(Max_len - i)
        int jw = 0;
        int tem[N] = {};
        for(int j = Max_len; j >= (Max_len - i); j--) {   // a[j]
            tem[j - (Max_len - i)] = b[i] * a[j] + jw;
            jw = tem[j - (Max_len - i)] / 10;
            tem[j - (Max_len - i)] %= 10;
        }
        add(c, tem);
    }
}

标签:自存,tem,int,Max,jw,len,--,加法,减法
From: https://www.cnblogs.com/re0acm/p/17325005.html

相关文章

  • MATLAB:基于概率距离快速削减法的风光场景生成与削减方法
    风光场景生成场景削减概率距离削减法蒙特卡洛法MATLAB:基于概率距离快速削减法的风光场景生成与削减方法参考文档:《含风光水的虚拟电厂与配电公司协调调度模型》完全复现场景削减部分仿真平台:MATLAB平台 代码具有一定的深度和创新性,注释清晰主要内容:风电、光伏以及电价场......
  • 两整数的加法
    一、内容简介:本题目要求读入2个整数A和B,然后输出它们的和(在一行中输入2个绝对值不超过1000的整数A和B)。二、思路:1、输入两个整数2、输出它们的和三、流程图:  四、代码实现:#include<iostream>usingnamespacestd;intmain(){inta,b,sum;cin>>a>>b;sum=a+b;cou......
  • 【剑指 Offer】 65. 不用加减乘除做加法
    【题目】写一个函数,求两个整数之和,要求在函数体内不得使用“+”、“-”、“*”、“/”四则运算符号。 示例:输入:a=1,b=1输出:2 提示:   a,b均可能是负数或0   结果不会溢出32位整数来源:力扣(LeetCode)链接:https://leetcode.cn/problems/bu-yong-jia-jian-c......
  • 基于概率距离快速削减法的风光场景生成与削减方法
    基于概率距离快速削减法的风光场景生成与削减方法关键词:风光场景生成场景削减概率距离削减法蒙特卡洛法参考文档:《含风光水的虚拟电厂与配电公司协调调度模型》完全复现场景削减部分仿真平台:MATLAB平台主要内容:代码主要做的是风电、光伏以及电价场景不确定性模拟,首先由一组......
  • java大数加法的一种思路
    packageorg.example;importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;classSuperNum{publicList<Integer>numList;/***成员变量的set方法*@paramnumList*/publicvoidsetNumList(List<Inte......
  • 高精度加法C++
    #include<iostream>#include<vector>usingnamespacestd;vector<int>Add(vector<int>&A,vector<int>&B){vector<int>C;intt=0;for(inti=0;i<A.size()||i<B.size();i++){if(i<A.size(......
  • 位运算--不用加法实现两数相加--Python解法
    不用加法实现两数相加(两数均可能是负数或者0)defadd(a,b):#迭代#a^b#无进位求和#(a&b)<<1#进位x=0xffffffffa&=xb&=xwhileb!=0:a,b=a^b,(a&b)<<1&xreturnaifa<=0x7fffffffelse~(a^x)......
  • PAT Basic 1074. 宇宙无敌加法器
    PATBasic1074.宇宙无敌加法器1.题目描述:地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个PAT星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是7......
  • NC1 大数加法
    NC1大数加法题目描述:以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。数据范围:s.length,t.length≤100000,字符串仅由'0'~‘9’构成要求:时间复杂度O(n)示例1输入:"1","99"返回值:"100"说明:1+99=100示例2输入:"114514",""返回值:"114514"......
  • 汇编中数组的加法运算-包含进位
    ;***************************************************************TITLE数组求和;***************************************************************;***************************************************************;*程序的运行环境,最低环境是386,数据段和代......