大位数相除
来源:互联网 发布:短信猫群发软件 编辑:程序博客网 时间:2024/06/02 07:43
A除以B (20)
题目链接:https://www.patest.cn/contests/pat-b-practise/1017
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
#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); //删除从0开始的第i个字符 ,其主要目的就是去掉first前面的多余的零; i=0; //去掉second前面多余的零 while('0'==second[i]) i++; second.erase(0,i); int len1=first.size(); int len2=second.size(); if(len1<len2) //保证s1大于s2 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)) //如果a小于b,那么商是0,余数a { //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
- 大位数相除
- 控制数据库两个小数相除后的小数位数
- 字符串四则运算之四无限位数相除的设计
- 大位数
- 大整数相除取余数
- 两个数相除,并设定所取小数的位数
- 两个数相除,无法除尽时获得指定小数点后的位数
- 模板--大位数加减乘除
- 实现大位数相乘算法
- 求大阶乘的位数
- c++实现大位数乘法
- 数一数二之2011位数除9余几
- 大整数相加,每个位数小于128
- leetCode_Multiply Strings(大位数相乘)
- 关于大位数计算的思考
- 大位数加法和乘法模版
- 斯特林公式 判断大数字位数
- c代码实现大位数减法
- Java sdut acm 3870 判定Java源文件名称
- 减少你的重复代码-lombok使用教程-idea集成插件
- C语言实现LRU缓存
- Spring验证的错误返回------BindingResult
- ant安装、环境变量配置及验证
- 大位数相除
- ElasticSearch学习30_Elasticsearch索引mapping的写入、查看与修改
- QT -- 入门
- window系统下TensorFlow安装
- NetBeans如何识别中文路径(打开含有中文的文件出现乱码)
- QT -- 建立连接
- TOJ4701 求阴影部分面积
- Algorithm Gossip (23) 后序式的运算
- 汉诺塔问题