zoukankan      html  css  js  c++  java
  • 高精度“+”算法

    一、高精度"+"算法

    1.1 编写高精度"+",记住下面的内容,代码也就游刃有余了

    (1) 首先我们要明白大整数是如何存储的?

    (2) 其次存储完,考虑如何运算?

    二、高精度"+"算法的核心

    2.1 大整数存储

    • 将大整数每一位是存到数组中,要保证高位在前,这个是考虑到进位,在高位上补一个数(如果在数组末尾补上这个数很容易,但如果在数组开头补上这个数需要把整个数组全部向后平移一位)。

    2.2 加法运算的本质

    • 实际就是满10进1的过程:A3A2A1A0+B2B1B0=C,考虑每个对应位Ai+Bi+t(1/0),t就是进位。

    2.3 另外我们要知道

    (1) A+B A与B小于数值(10^6)

    (2) A-B A与B小于数值(10^6)

    (3) A*a A要满足len(A)小于10^6,Note:这个是位数

    (4) A/a A要满足len(A)小于10^6

    三、高精度"+"的代码模板

    // C = A + B, A >= 0, B >= 0
    vector<int> add(vector<int> &A,vector<int> &B)//A与B是倒着表示完的数组
    {
    	vector<int> C;
    	
    	int t=0;//进位,一开始是零
    	for(int i=0;i<A.size()||i<B.size();i++)
    	{
    		if(i<A.size()) t+=A[i];
    		if(i<B.size()) t+=B[i];//Ai+Bi+t
    		C.push_back(t%10);
    		t/=10;		 
    	}
    	if(t) C.push_back(1);
    	return C;
    }
    """
    string a, b;
    vector<int> A,B;	
    cin>>a>>b;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//数字字符减去'0'将其转化位整数数字
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');//大整数存储部分的代码
    """
    

    查看更多

  • 相关阅读:
    83. Remove Duplicates from Sorted List
    35. Search Insert Position
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    111. Minimum Depth of Binary Tree
    169. Majority Element
    171. Excel Sheet Column Number
    190. Reverse Bits
  • 原文地址:https://www.cnblogs.com/lastk/p/12442140.html
Copyright © 2011-2022 走看看