说实话,我也不能保证我能写出来,这是我老师的题解
#include <bits/stdc++.h>
using namespace std;
string s1,s2,s3,s4;
string BS09[10];
bool GT(string s1,string s2)
{
int l1=s1.size(),l2=s2.size();
bool b1=l1>l2;
bool b2=(l1==l2) && s1>s2;
return b1||b2;
}
string add(string s1,string s2)
{
string s3="";
int l1=s1.size(),l2=s2.size();
if (l1<l2) swap(l1,l2),swap(s1,s2);
int i,j,k;
for (i=1; i<=l1-l2; i++) s2="0"+s2;
j=0;
for (i=l1-1; i>=0; i--)
{
int x=s1[i]-'0'+s2[i]-'0'+j;
//j=x/10,x=x%10;
if (x>=10)
{
j=1,x-=10;
}
else j=0;
char ch='0'+x;
s3=ch+s3;
}
if (j==1) s3="1"+s3;
return s3;
}
void B09() // s的 i倍
{
BS09[0]="0",BS09[1]=s2;
for (int i=2; i<=9; i++) BS09[i]=add(BS09[i-1],s2);
//for (int i=0; i<=9; i++) cout<<BS09[i]<<endl;
}
string sub(string s1,string s2)
{
string s3="";
int l1=s1.size(),l2=s2.size();
int i,j,k;
for (i=1; i<=l1-l2; i++) s2="0"+s2;
j=0;
for (i=l1-1; i>=0; i--)
{
int x=s1[i]-s2[i]-j;
//j=x/10,x=x%10;
if (x<0)
{
j=1,x+=10;
}
else j=0;
char ch='0'+x;
s3=ch+s3;
}
i=0;
while (s3[i]=='0' && i<s3.size()-1)
i++;
return s3.substr(i);
}
int main()
{
cin>>s1>>s2;
B09();
int l1=s1.size();
string ts="";
for (int p=0; p<=l1-1; p++)
{
ts=ts+s1[p];// 新的被除数
cout<<ts<<endl;
int i=9;
while (GT(BS09[i],ts)) i--;
char ch=i+'0';
s3=s3+ch;
ts=sub(ts,BS09[i]);
cout<<s3<<' '<<ts<<endl;
}
cout<<s3<<' '<<s4<<endl;
}
谢谢