AcWingday2(高精度)

高精度

1.大数据存储

数组:0 1 2 3 4 5 6 7 8

数据:9 8 7 6 5 4 3 2 1

这样把高位存在后面是因为在进行运算的时候可能会产生进位,所以放在后面方便,要是放在前面的话产生进位存储的时候需要把后面的都往后移麻烦。

(1)加法: 模拟竖式:

A3 A2 A1 A0

+ B2 B1 B0

---------------------------------

                                       

让从A0和B0相加然后 和10 取余,余数作为结果,若相加的结果大于10了则前面要加1

所以让每一位都是A0+B0+t

代码:

#include
#include 

using namespace std;

const int N=1e6+10; 

vector add(vector &A,vector &B)
{
    vector C;
    int t=0;  //进位
    for(int i=0;i A,B;
    cin>>a>>b;  //例如输入a=“123456”
    //读入的是字符串类型,但是容器是int类型,push_back的时候是读入的是字符型a[i]='6',然后相减的到整形的数
    for(int i=a.size()-1; i >= 0; i--) A.push_back(a[i]-'0'); //容器从前往后是654321 
    for(int i=b.size()-1; i >= 0; i--) B.push_back(b[i]-'0');
    auto C=add(A,B);  //自动选择类型  此处auto=vector
    for(int i=C.size()-1; i>= 0; i --) printf("%d",C[i]);//从后面输出
    return 0;
}

你可能感兴趣的:(算法)