大数运算(三)——大数相除求余数和商

来源:互联网 发布:手机电影软件哪个最好 编辑:程序博客网 时间:2024/06/08 16:00

描述:

输入两个超长的整型构成的字符串,使用空格隔开,求前者除以后者的余数

输入输出格式要求

输入的字符串最大长度为100个字符,输出商和余数,之间用空格隔开,如果结果异常输出NULL

样例:

输入:123456789 23456789

输出:5 6172844

#include<iostream>#include<string>using namespace std;bool Compare(string first,string second){    int i=0;    while('0'==first[i])        i++;    first.erase(0,i);    i=0;    while('0'==second[i])        i++;    second.erase(0,i);    int len1=first.size();    int len2=second.size();    if(len1<len2)        return false;    else if(len1==len2 && first<second)        return false;    return true;}string Subtraction(string s1,string s2){    if(s1==s2)        return "0";    int len1=s1.size();    int len2=s2.size();    for(int i=len2-1;i>=0;i--)    {        s1[len1-1-i] ='0'+ s1[len1-1-i] -s2[len2-1-i];  //不要忘了加‘0’    }    //cout<<s1<<endl;    for(int i=len1-1;i>=0;i--)    {        if(s1[i]<'0')        {            s1[i] += 10;            s1[i-1]--;        }    }    int i=0;    while(s1[i]=='0')        i++;    s1.erase(0,i);  //去掉字符串前面的0    //cout<<s1<<endl;    return s1;}void BigDivision(string a,string b){    string result,s;    //result用来保存商,s用来保存每次的运算时的被除数及最后的余数    int count,i;    if("0"==b)    {        //cout<<"Error,divisor can not be zero!"<<endl;        cout<<"NULL"<<endl;        return;    }    if(!Compare(a,b))    {        //cout<<"商:"<<0<<",余数:"<<a<<endl;        cout<<0<<" "<<a<<endl;        return;    }    int len=a.size();    for(int i=0;i<len;i++)    {        count=0;        s.push_back(a[i]);        while(Compare(s,b))        {            s=Subtraction(s,b);            count++;        }        result+=char(count+'0');    //s>b时加每次相除得到的商或者,s<b时补0    }    //cout<<s<<endl;    i=0;    while('0'==result[i])        i++;    result.erase(0,i);    i=0;    while('0'==s[i])        i++;    s.erase(0,i);    //cout<<"商为:"<<result<<",余数: "<<s<<endl;    cout<<result<<" "<<s<<endl;}int main(){    string str1,str2;    while(cin>>str1>>str2)    //cout<<subtraction(str1,str2)<<endl;        BigDivision(str1,str2);}

程序运行结果:

这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿眼睛上火眼屎多怎么办 铁耳屎在最里面怎么办 婴儿鼻屎特别深怎么办 鼻子干呼吸就疼怎么办 儿童鼻子里总有好多鼻屎怎么办 小孩鼻子里有鼻屎呼吸不通怎么办 鼻子不通通气鼻屎粘在鼻子怎么办 鼻子里面干燥长鼻屎怎么办 鼻孔里干的难受怎么办 每天有很多鼻屎怎么办 鼻子里面干的疼怎么办 婴儿鼻屎堵住了怎么办 婴儿有很多鼻屎怎么办 隆鼻7天好多鼻屎怎么办 隆鼻第五天好多鼻屎怎么办 小孩鼻屎堵住了怎么办 风寒感冒流清鼻涕怎么办 流清鼻涕吐黄痰不发烧怎么办 宝宝流黄鼻涕发烧怎么办 感冒了浓鼻涕多怎么办 感冒流浓鼻涕怎么办速效办法 孩子一直流清水鼻涕怎么办 宝宝鼻子呼噜呼噜响怎么办 鼻涕往嗓子里流怎么办 咳嗽痰多鼻涕多怎么办 没感冒嗓子痰多鼻涕怎么办 孩子感冒后鼻涕特别多怎么办 经常有鼻涕怎么办才好 怀孕后鼻涕痰多怎么办 鼻炎有鼻涕痰多怎么办 宝宝咳嗽痰多鼻涕多怎么办 宝宝两岁清鼻涕咳嗽痰多怎么办 喉咙咸咸的有痰怎么办 宝宝咳嗽鼻塞喉咙有痰怎么办 绝地求生刺激战场射击键误触怎么办 在皮卡堂卡的游泳了怎么办 假如遇到老赖没能力还钱怎么办 服刑人拒不执行伤害赔偿怎么办? 面对当前严峻形势作为军人怎么办 想起诉不知道对方地址怎么办 遇见家里来嫌疑人员怎么办