高精度除法 去除前导零 翻转函数 AcWing 794. 高精度除法

#include

using namespace std;

vector<int> div(vector<int> &A,int &b,int &r)
{
    r=0;
    vector<int> C;
    
    for(int i=A.size()-1;i>=0;i--)
    {
        r=r*10+A[i];
        C.push_back(r/b);
        r%=10;
    }
    reverse(C.begin(),C.end());
    while(C.size()>1&&C.back()==0)
        C.pop_back();
        
    return C;
}

int main()
{
    string a;
    int b;
    cin>>a>>b;
    
    vector<int> A;
    for(int i=a.size()-1;i>=0;i--)
        A.push_back(a[i]-'0');
    
    int r;
    auto C=div(A,b,r);
    
    for(int i=C.size()-1;i>=0;i--)
        cout<<C[i];
    cout<<endl<<r<<endl;
    
    return 0;
}

挑战模式使用上面的代码,感觉没啥问题但是怎么就错了呢

函数里面要除以b的,上面的代码除以10

#include

using namespace std;

vector<int> div(vector<int> &A,int &b,int &r)
{
    r=0;
    vector<int> C;
    
    for(int i=A.size()-1;i>=0;i--)
    {
        r=r*10+A[i];
        C.push_back(r/b);
        r%=b;
    }
    reverse(C.begin(),C.end());
    while(C.size()>1&&C.back()==0)
        C.pop_back();
        
    return C;
}

int main()
{
    string a;
    int b;
    
    cin>>a>>b;
    
    vector<int> A;
    for(int i=a.size()-1;i>=0;i--)
        A.push_back(a[i]-'0');
        
    int r;
    auto C=div(A,b,r);
    
    for(int i=C.size()-1;i>=0;i--)
        cout<<C[i];
    cout<<endl<<r<<endl;
    
    return 0;
}

高精度除法

和高精度乘法一样,把整型数字看成是一个整体,有一个细节需要注意,高精度除法是从高位开始计算的,这一点和加减乘法都不一样

为了满足存储方式一样,还是把个位存在了第一位,所以后面存答案的时候需要把答案翻转一下

r表示的是余数,余数每一次乘以10其实模拟的就是除法的过程,比如说我们用122除以9,先用12除以9,余数是3,然后把后面一位2加到3的后面,变成32继续除以9,把2加到3后面这个过程就是这一行代码的意思

r=r*10+A[i];

你可能感兴趣的:(算法竞赛,#,acwing算法基础,算法)