加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数求余

发布时间:2020-12-14 02:22:28 所属栏目:大数据 来源:网络整理
导读:大数求余,除数与被除数都是大数 /*注意几种情况:主要思想是利用减法,一个个反复去减 1. a的lenb的len时候直接返回串a 2. a的lenb的len的时候要把b的长度在尾部补齐,同时要判断补齐后的大小是否还满足a大于b,如果不满足则b后退一个,前面填0 3. a每次操

大数求余,除数与被除数都是大数

/*注意几种情况:主要思想是利用减法,一个个反复去减 1. a的len<b的len时候直接返回串a 2. a的len>b的len的时候要把b的长度在尾部补齐,同时要判断补齐后的大小是否还满足a大于b,如果不满足则b后退一个,前面填0 3. a每次操作完要把串前面存在0的地方去掉*/
#include <iostream>
#include <string>
using namespace std;
string divided(string a,string b)
{
    if(a.size()==b.size())
    {
        string temp=a;
        int flag=0;
        int ai=0,bi=0;
        for(int i=a.length()-1;i>=0;i--)
        {
            ai=a[i]-'0'-flag;
            bi=b[i]-'0';
            if(ai<bi)
            {
                flag=1;
                temp[i]=10+ai-bi+'0';
            }
            else
            {
                flag=0;
                temp[i]=ai-bi+'0';
            }
        }
        return temp;        
    }
}
int main()
{
    string a,b;
    string aa,bb;
    bool flag=true;
    while(cin>>a>>b)//合法输入没有判断负数之类的情况
    {
        if((a.size()<b.size())||((a.size()==b.size())&&(a<b)))
        {
            cout<<a<<endl;
            continue;
        }
        aa=a;
        bb=b;
        while((aa.size()>bb.size())||((aa.size()==bb.size())&&(aa>=bb)))
        {
            string aaa;
            int j=aa.size()-bb.size();
            for(int i=0;i<j;i++)
                bb+="0";
            if(aa>bb)
            {
                aa=divided(aa,bb);
                bb=b;
            }
            else if(aa==bb)
            {
                aa="0";
                bb=b;
            }
            else
            {
                bb="0"+bb.substr(0,bb.length()-1);
                aa=divided(aa,bb);
                bb=b;
            }
            while((aa.substr(0,1)=="0")&&(aa.size()>1))
                    aa=aa.substr(1,aa.size()-1);
        }

        cout<<aa<<endl;
    }
    return 0;
}

被除数为大数,除数为int范围

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str;
    int value;
    while(cin>>str>>value)
    {
        int len=str.size();
        int t=0;
        for (int i = 0; i < len; ++i)
        {
            t*=10;
            t+=str[i]-'0';
            if (t>=value)
            {
                t=t%value;
            }
        }
        cout<<t<<endl;
    }
}

求a的n次方 mod b

//a^Nmod b
//=((a mod b)*a)mod b
#include<iostream>
using namespace std;
int main()
{
    int v1,v2,v3;
    int r=1;
    cin>>v1>>v2>>v3;
    for (int i = 0; i < v2; ++i)
    {
        r=r*v1%v3;
    }
    cout<<r<<endl;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读