C++——二进制余数

描述
  二进制数 n 除以二进制数 m 的二进制余数是多少?
输入:
第一行输入一个二进制数 n(n > 0),n 的长度(二进制数的位数)≤200000。
第二行输入一个二进制数 m(m > 0),m 的长度(二进制数的位数)≤20。
输出:
输出 n 除以 m 的余数。
样例:
输入1:
1010101010
111000
输出1:
1010
输入2:
100
10
输出2:
0
交了11次了,一直40分,听说好像要用到高精度的知识,但是我不会啊~,求帮助!

#include
#include
using namespace std;
 
void ejz(long long x){//就一位一位输出
    if(x>1) ejz(x/2);
    cout<2;
}
int quyu(string str,long long num){
    long long i,len,ans=0;
    len = str.size();
    for(i=0;i10+str[i]-'0';   //前一位上的数的余数*10+当前位上的数
        ans=ans%num;
    }
    return ans;
}
int main()
{
    long long n=0,m=0,o;
    char c=' ';
    string str,str2;
    while(c!='0'&&c!='1') c=getchar();//c初始化是空格,不然会报错
    while(c=='0'||c=='1') n=n*2+(c=='1'),c=getchar();str=to_string(n);//一直存入c直到不是0或者1,然后加进n
    while(c!='0'&&c!='1') c=getchar();//刚刚结束后c是\n,重新存入以下,不然会报错
    while(c=='0'||c=='1') m=m*2+(c=='1'),c=getchar();str2=to_string(m);//一直存入c直到不是0或者1,然后加进n
    o=quyu(str,m);
    ejz(o);
    return 0;   
}

#pragma once
#include<deque>
#include<string>
namespace MyStd
{
    class CBigInt;
    class CUnsignedBigInt;
    class MulBuffer;
    class CUnsignedBigInt
    {
    protected:
        friend class MulBuffer;
        using valueType = uint32_t;
        std::deque<valueType> m_data;//数字
        static CUnsignedBigInt Mul(CUnsignedBigInt n1, valueType n2);//计算CUnsignedBigInt与一位数相乘的结果
        void Reduced();//化简(去掉前导0)
    public:
        static const short m_radix = 10;//使用10进制存储,可以改,结果不会变
        static inline const CUnsignedBigInt& UnsignedLongLongMax()noexcept;
        static inline const CUnsignedBigInt& LongLongMax()noexcept;
        CUnsignedBigInt();
        CUnsignedBigInt(unsigned long long num);
        CUnsignedBigInt(const CUnsignedBigInt& i);
        CUnsignedBigInt(CUnsignedBigInt&& i);
        CUnsignedBigInt(const std::string& source, uint8_t radix = 10);
        size_t Size()const noexcept;//位数
        valueType At(size_t index)const;
        CUnsignedBigInt SubNum(size_t first, size_t count = 1)const;
        virtual std::string ToString(uint8_t radix = 10)const;//radix范围为2-16
        CUnsignedBigInt& operator=(unsigned long long num);
        CUnsignedBigInt& operator=(const CUnsignedBigInt& n);
        CUnsignedBigInt& operator=(CUnsignedBigInt&& n);
        virtual CUnsignedBigInt& operator=(const std::string& source);
        virtual void Assign(const std::string& source, uint8_t radix = 10);
        void Assign(unsigned long long num);
        bool IsZero()const;
        friend std::strong_ordering operator<=>(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2)noexcept;
        static std::strong_ordering Compare(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2);
        friend bool operator==(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2);
        friend bool operator!=(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2);
        friend CUnsignedBigInt operator+(CUnsignedBigInt n1, const CUnsignedBigInt& n2);
        friend CUnsignedBigInt operator-(CUnsignedBigInt n1, const CUnsignedBigInt& n2);//计算差的绝对值
        friend CUnsignedBigInt operator*(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2);
        static CUnsignedBigInt Divide(const CUnsignedBigInt& n1, CUnsignedBigInt n2, CUnsignedBigInt& remainder);//除法,结果向0舍入,例如(-7)/5=-1
        friend CUnsignedBigInt operator/(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2);
        friend CUnsignedBigInt operator%(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2);
        CUnsignedBigInt& operator+=(const CUnsignedBigInt& n);
        CUnsignedBigInt& operator-=(const CUnsignedBigInt& n);
        CUnsignedBigInt& operator*=(const CUnsignedBigInt& n);
        CUnsignedBigInt& operator/=(const CUnsignedBigInt& n);
        CUnsignedBigInt& operator%=(const CUnsignedBigInt& n);
        CUnsignedBigInt& operator++();
        CUnsignedBigInt& operator--();
        CUnsignedBigInt operator++(int);
        CUnsignedBigInt operator--(int);
        static CUnsignedBigInt Add(CUnsignedBigInt n1, const CUnsignedBigInt& n2);
        static CUnsignedBigInt Sub(CUnsignedBigInt n1, const CUnsignedBigInt& n2);
        CBigInt operator-()const;
        const CUnsignedBigInt& operator+()const noexcept;
        static CUnsignedBigInt Pow(CUnsignedBigInt n, unsigned long long exponential);//使用快速幂
        static CUnsignedBigInt Pow(const CUnsignedBigInt& n, CUnsignedBigInt exponential);//不使用快速幂
        static CUnsignedBigInt GCD(CUnsignedBigInt n1, CUnsignedBigInt n2);
        static CUnsignedBigInt LCM(const CUnsignedBigInt& n1, const CUnsignedBigInt& n2);
        unsigned long long ToUnsignedLongLong()const;
        virtual long double ToLongDouble()const;
    };
    class CBigInt :public CUnsignedBigInt
    {
    private:
        friend class MulBuffer;
        bool m_sign;//1正0负
    public:
        CBigInt();
        CBigInt(long long num);
        CBigInt(const CBigInt& i);
        CBigInt(CBigInt&& i);
        CBigInt(const CUnsignedBigInt& i);
        CBigInt(CUnsignedBigInt&& i);
        CBigInt(const std::string& source, uint8_t radix = 10);
        CUnsignedBigInt Abs()const noexcept;
        virtual std::string ToString(uint8_t radix = 10, bool ShowPlusSign = false)const;//radix范围为2-16
        CBigInt& operator=(long long num);
        CBigInt& operator=(const CBigInt& n);
        CBigInt& operator=(CBigInt&& n);
        virtual CBigInt& operator=(const std::string& source);
        virtual void Assign(const std::string& source, uint8_t radix = 10);
        static std::strong_ordering Compare(const CBigInt& n1, const CBigInt& n2);
        friend std::strong_ordering operator<=>(const CBigInt& n1, const CBigInt& n2)noexcept;
        friend bool operator==(const CBigInt& n1, const CBigInt& n2);
        friend bool operator!=(const CBigInt& n1, const CBigInt& n2);
        friend CBigInt operator+(CBigInt n1, const CBigInt& n2);
        friend CBigInt operator-(CBigInt n1, const CBigInt& n2);
        friend CBigInt operator*(CBigInt n1, const CBigInt& n2);
        static CBigInt Divide(const CBigInt& n1, const CBigInt& n2, CBigInt& remainder);//除法,结果向0舍入,例如(-7)/5=-1
        friend CBigInt operator/(const CBigInt& n1, const CBigInt& n2);
        friend CBigInt operator%(const CBigInt& n1, const CBigInt& n2);
        CBigInt& operator+=(const CBigInt& n);
        CBigInt& operator-=(const CBigInt& n);
        CBigInt& operator*=(const CBigInt& n);
        CBigInt& operator/=(const CBigInt& n);
        CBigInt& operator%=(const CBigInt& n);
        CBigInt& operator

我首页置顶博客有个高精度代码

实在不行贴代码也行啊~