鼠扑 发表于 2022-10-29 16:37:54

高精度HighAccuracy_acwing.cpp

​https://img-blog.csdnimg.cn/961214b4662e405a80bfd3f04c2fc68a.pnghttps://img2022.cnblogs.com/blog/2920333/202210/2920333-20221029155342967-97090107.gif​

 文章:
        力扣模板:字符串相加 - 字符串相加 - 力扣(LeetCode)
        acwing模板:常用代码模板1——基础算法 - AcWing
 
例题:
        P1009 阶乘之和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
 
笔记:HighAccuracy_acwing.cpp
        说明:参考acwing的模板,但是和acwing模板不完全相同

#includeusing namespace std;//HighAccuracy_acwing.cpp/*说明:参考acwing的模板:https://www.acwing.com/blog/content/277/但是和acwing模板不完全相同*/// C = A + B, A >= 0, B >= 0//这里不加&,就可以避免改变了原来的a,b数组,使得a,b数组可以重复利用vector add(vector A, vector B){//正序输入两个vector类型的“数”    if (A.size() < B.size()) return add(B, A);//使得A数组是最大的    //如果未反转,在if下面加reverse,不能在if上面加reverse,否者二次反转,等于没有反转      reverse(A.begin(),A.end());//反转数组,变成个十百千万···    reverse(B.begin(),B.end());    vector C;//初始化答案数组    int t = 0;    for (int i = 0; i < A.size(); i ++ ){      t += A;      if (i < B.size()) t += B;//如果B还有数字      C.push_back(t % 10);      t /= 10;    }    if (t) C.push_back(t);//最后一次加法可能还有进位的数,把最高位补上    return C;}string add(string a, string b){    if(a.size()= 0vector sub(vector A, vector B){    vector C;    for (int i = 0, t = 0; i < A.size(); i ++ )    {      t = A - t;      if (i < B.size()) t -= B;      C.push_back((t + 10) % 10);      if (t < 0) t = 1;      else t = 0;    }    while (C.size() > 1 && C.back() == 0) C.pop_back();    return C;}/*高精度乘低精度 —— 模板题*/// C = A * b, A >= 0, b >= 0vector mul(vector A, int b){//输入正序的高精度A和低精度b    vector C;//初始化答案数组    reverse(A.begin(),A.end());//反转数组,变成个十百千万···    int t = 0;    for (int i = 0; i < A.size() || t; i++ ){//A数组还有数 或 t还有数      if (i < A.size()) t += A * b;//如果 A数组还有数      C.push_back(t % 10);      t /= 10;    }    while (C.size() > 1 && C.back() == 0) C.pop_back();//末尾可能是0,都要去掉(我感觉是多余的,不可能有这种情况)(难道是处理b==0?)    reverse(C.begin(),C.end());//反转数组,恢复正序    return C;}string mul(string a, int b){    reverse(a.begin(), a.end());    string c;    int t = 0;    for(int i = 0; i
页: [1]
查看完整版本: 高精度HighAccuracy_acwing.cpp