James0917 2022-07-25 14:11 采纳率: 77.8%
浏览 55

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<iostream>
#include<cstring>
using namespace std;
 
void ejz(long long x){//就一位一位输出
    if(x>1) ejz(x/2);
    cout<<x%2;
}
int quyu(string str,long long num){
    long long i,len,ans=0;
    len = str.size();
    for(i=0;i<len;i++)
    {
        ans=ans*10+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;   
}
  • 写回答

3条回答 默认 最新

  • Code Writers 全栈领域新星创作者 2022-07-25 16:51
    关注
    
    #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
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 7月25日

悬赏问题

  • ¥15 (标签-考研|关键词-set)
  • ¥15 求修改代码,图书管理系统
  • ¥15 请问有没求偏多标签数据集yeast,reference,recreation,scene,health数据集。
  • ¥15 传感网应用开发单片机实训
  • ¥15 Delphi 关于sAlphaImageList使用问题
  • ¥15 寻找将CAJ格式文档转txt文本的方案
  • ¥15 shein测试开发会问些啥我是写java的
  • ¥15 关于#单片机#的问题:我有个课程项目设计,我想在STM32F103veTX单片机,M3主控模块上设计一个程序,在Keil uVision5(C语言)上代码该怎么编译?(嫌钱少我可以加钱,急急急)
  • ¥15 opnet仿真网络协议遇到问题
  • ¥15 在安装python的机器学习程序包scikit-learn(1.1版本)时遇到如下问题