#C08L03P02. C08.L03.高精度除法.程序填空.
C08.L03.高精度除法.程序填空.
题目描述
给出两个高精度整数,求它们的商和余数。
输入格式
两行,每行为一个高精度整数,长度不超过 255。
输出格式
两行,第一行为商 c,第二行为余数 d(余数为零时不要输出 0)
样例
12345678900
99
124703827
27
程序填空
#include<bits/stdc++.h>
using namespace std;
bool check(string a,string b)
{
if(a.size()>b.size()||(a.size()==b.size()&&a>=b))
return true;
else
return false;
}
string Minus(string a,string b) //返回a减b的值
{
int i,j,len_a,len_b;
string ans;
len_a=a.size();
len_b=b.size();
int ov=0,t;
char c;
for(i=len_a-1,j=len_b-1;i>=0||j>=0;i--,j--)
{
t = a[i] - '0' - ov;
if(j>=0)
t = t - (b[j] - '0');
if(t<0)
{
ov = 1;
t += 10;
}
else
ov = 0;
c = '0' + t;
ans = c + ans ;
}
while(ans.size()>1&&ans[0]=='0')
ans.erase(0,1);
return ans;
}
int main()
{
string a,b,aa,ans;
char c;
cin>>a>>b;
int len,t,p;
len=a.size();
aa="";
p = 0;
while( 填空(1) )
{
aa = aa+a[p++]; //
while(aa.size()>1&&aa[0]=='0) //如果上一轮的余数为0,就会出现前导 0
aa.erase(0,1);
t = 0; //t是商
while( 填空(2) ) //只要aa比b大,就减去b,减了多少次,意味着商就是多少
{
aa = 填空(3) ;
填空(4) ;
}
//退出循环的时候,aa已经是比b小,aa是余数,余数延续后面的的数字,会成为新的被被除数。
c = '0' + t;
ans = ans+c;
}
//删除前导0
while(ans.size()>1&&ans[0]=='0')
ans.erase(0,1);
cout<<ans<<endl;
if(填空(5)) //题目说,余数为0的时候不用输出
cout<<aa;
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
填空(4):{{ input(4) }}
填空(5):{{ input(5) }}
相关
在以下作业中: