• 用c++写一个高精度计算的加法算法,输入两个正整数,求它们的和


    以下是一个简单的C++程序,用于执行高精度加法操作。该程序将两个正整数作为输入,然后计算它们的和,并以字符串形式输出结果。这个程序可以处理非常大的整数。

    #include
    using namespace std;
    int a1[200],b1[200],c[200];
    int main(){
        char a[200]="10012",b[200]="4";
        int lena=strlen(a);
        int lenb=strlen(b);
        for(int i=1;i<=lena;i++){
            a1[i]=a[lena-i]-'0';
        }
        for(int i=1;i<=lenb;i++){
            b1[i]=b[lenb-i]-'0';
        }
        int lenc=1;
        int x=0;
        while(lenc<=lena||lenc<=lenb){
            c[lenc]=a1[lenc]+b1[lenc]+x;
            x = c[lenc]/10;
            c[lenc]%=10;
            lenc++;
        }
        c[lenc]=x;
        while(c[lenc]==0&&lenc>1){
            lenc--;
        }
        for(int i=lenc;i>=1;i--){
            cout<<c[i];
        }
        cout<<endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    代码解释

    这段C++代码实现了两个大整数的高精度加法,其中大整数以字符数组的形式表示,并将它们按位相加,处理进位。以下是代码的逐行解释:

    1. #include:这是一个预处理指令,通常在C++中用于包含一些常用的标准库头文件,以简化编程。在这里,它包含了一些常用的C++标准库头文件。

    2. using namespace std;:这一行指示代码将使用C++标准命名空间,这意味着你可以直接使用标准库中的函数和对象,而不需要使用前缀std::

    3. int a1[200], b1[200], c[200];:定义了三个整数数组,a1b1c,用于存储大整数的各个位数。

    4. char a[200] = "10012", b[200] = "4";:定义了两个字符数组ab,用于表示两个大整数。这里初始化了a为"10012"和b为"4"。

    5. int lena = strlen(a);int lenb = strlen(b);:计算了两个大整数的长度,即它们的位数。

    6. for (int i = 1; i <= lena; i++)for (int i = 1; i <= lenb; i++):这两个循环用于将字符数组中的数字字符转换为整数并存储在a1b1数组中。它们也在每一步中打印了a1b1的内容。

    7. int lenc = 1;:初始化变量lenc,用于表示结果数组c的长度。

    8. int x = 0;:初始化变量x,用于存储进位的值,初始值为0。

    9. while (lenc <= lena || lenc <= lenb):这是一个循环,它会一位一位地处理两个大整数的相加,直到处理完较长的那个整数。

    10. c[lenc] = a1[lenc] + b1[lenc] + x;:将a1b1中相应位置的数字相加,并加上前一位的进位x,然后将结果存储在c数组中。

    11. x = c[lenc] / 10;:计算当前位的进位,并将结果存储在变量x中。

    12. c[lenc] %= 10;:将当前位的结果限制在0到9之间,以确保它只存储一个数字。

    13. lenc++;:递增lenc,以处理下一位。

    14. c[lenc] = x;:在循环结束后,将最后的进位存储在c数组中的最高位。

    15. 最后一个循环通过逆序打印c数组中的结果,输出了相加后的大整数。

    这段代码最终输出了相加后的结果。注意,这是一个基本的高精度加法实现,可以处理非常大的整数,但对于更复杂的高精度运算,可能需要更多的代码和优化。

    b1[i]=b[lenb-i]-‘0’;中为什么要-‘0’ ?

    在这段代码中,b 是一个字符数组,用于存储大整数的每一位数字的字符表示,例如,字符 '4' 表示数字 4。C++中,字符表示的数字在ASCII码中有相应的整数值,字符 '0' 的ASCII码值是 48,字符 '1' 的ASCII码值是 49,以此类推。

    所以,为了将字符 '4'(或其他数字字符)转换为相应的整数值,我们需要从字符的ASCII码值中减去 '0' 的ASCII码值,即 '4' - '0',这将得到整数 4。这是一个常见的方式,将字符表示的数字转换为整数,因为它们在ASCII码中是连续的。

    因此,b1[i] = b[lenb - i] - '0'; 这行代码的目的是将字符数组 b 中的字符数字转换为整数,并存储在 b1 数组中,以便进行高精度加法操作。

    再分别用java和python写一下

    当用Java编写高精度加法时,可以使用Java的BigInteger类,这个类可以处理非常大的整数。以下是一个Java示例:

    import java.math.BigInteger;
    import java.util.Scanner;
    
    public class HighPrecisionAddition {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("请输入第一个正整数: ");
            String num1 = scanner.next();
            System.out.print("请输入第二个正整数: ");
            String num2 = scanner.next();
    
            BigInteger bigNum1 = new BigInteger(num1);
            BigInteger bigNum2 = new BigInteger(num2);
            BigInteger sum = bigNum1.add(bigNum2);
    
            System.out.println("它们的和是: " + sum);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    这个Java程序首先导入BigInteger类,然后让用户输入两个正整数,将它们转换成BigInteger对象,执行加法操作,然后输出结果。

    接下来是Python的高精度加法示例,Python中可以使用内置的整数类型,它们可以自动处理大整数:

    num1 = int(input("请输入第一个正整数: "))
    num2 = int(input("请输入第二个正整数: "))
    
    sum = num1 + num2
    
    print("它们的和是:", sum)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这个Python程序直接让用户输入两个正整数,然后执行加法操作,最后输出结果。Python的整数类型可以自动处理大整数,因此不需要额外的库或类型转换。

  • 相关阅读:
    java拼图游戏
    蓝桥杯 Java 青蛙过河
    XSS原理
    常见的音频知识
    Python 操作 Excel,如何又快又好?
    Unity WIFI 无线打包至手机
    珈创生物上市再次失败:先后折戟科创板、创业板,郑从义为董事长
    07.数据持久化之文件操作
    第三章、基于Ruoyi-Vue开发脚手架之多账户登录体系实现
    Java并发编程系列33:线程池ThreadPoolExecutor工作流程
  • 原文地址:https://blog.csdn.net/qq_27575627/article/details/133943841