a 为被除数、b为除数、r为商
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
bool match(string a,string b) //判断大小
{
int la=a.size();
int lb=b.size();
if(la>lb)
return true;
else if(la==lb)
{
for(int i=0; i<la; i++)
{
if(a[i]>b[i])
return true;
else if(a[i]<b[i])
return false;
}
return true;
}
else
return false;
}
string sub(string a,string b) //减法
{
int aa[10010],bb[10010];
mem(aa,0); //整数组清零
mem(bb,0);
int la=a.size();
int lb=b.size();
int i,j=0;
for(i=la-1; i>=0; i--) //将a倒置转化成数字
{
aa[j++]=a[i]-'0';
}
j=0;
for(i=lb-1; i>=0; i--) //将b倒置转化成数字
{
bb[j++]=b[i]-'0';
}
for(i=0; i<la; i++) //相减
{
aa[i]=aa[i]-bb[i];
if(aa[i]<0)
{
aa[i]+=10;
aa[i+1]--;
}
}
while(la-1>=0&&aa[la-1]==0)
{
a.erase(la-1); //清除数前的零
la--;
}
j=0;
for(i=la-1; i>=0; i--)
a[j++]=aa[i]+'0';
return a;
}
string division(string a,string b) //除法
{
string c; //商
char s[10010];
int i,la,lb,lbb,shang;
la=a.size();
lb=b.size();
lbb=la; //b增加到a的长度
for(i=lb; i<la; i++) //在b后增加0达到a的长度
b+="0";
if(!match(a,b)) //当b大于a减去一个0
{
lbb--;
b.erase(lbb);
}
while(lbb>=lb)
{
mem(s,0);
shang=0;
while(match(a,b))
{
a=sub(a,b);
shang++;
}
itoa(shang,s,10);
c+=s;
if(a.empty()) //a被除尽了
{
for(i=0;i<lbb-lb;i++)
c+="0";
break;
}
lbb--;
b.erase(lbb);
}
return c;
}
int main()
{
string a,b,r;
while(cin>>a>>b)
{
r=division(a,b);
cout<<"商\n"<<r<<endl;
}
return 0;
}