这道题是有难度的,注意超时问题,回溯法
题目描述
求两个不超过100位的正整数相除的商。
输入描述
第1 行是测试数据的组数n,每组测试数据占2 行,第1 行是被除数,第2 行是除数,每行数据不超过100位。
输出描述
n 行,每组测试数据有一行输出是相应的整数商
样例输入
2
10000000000000000000000000000000000000000
10000000000
5409656775097850895687056798068970934546546575676768678435435345
134563
样例输出
1000000000000000000000000000000
40201665949019053496778882739452679670834825142697239794263
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n,i; 5 cin>>n; 6 for(i=0;i<n;i++){ 7 long long a,b,p,q; 8 cin>>a; 9 cin>>b; 10 p=a%b; 11 q=(a-p)/b; 12 cout<<q<<endl; 13 } 14 return 0; 15 }
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 string minus(string a,string b){ 5 int i,j,length,p; 6 int per=0,k=0; 7 string zero="0"; 8 length=a.size()-b.size(); 9 j=a.size()-1; 10 int min[j]; 11 string zeros(length,'0'); 12 b=zeros+b; 13 for(i=j;i>=0;i--){ 14 p=(a[i]-'0')-(b[i]-'0')-per; 15 if(p<0){ 16 p=p+10; 17 min[j--]=p; 18 per=1; 19 } 20 else{ 21 min[j--]=p; 22 per=0; 23 } 24 } 25 while(min[k]==0){ 26 k++; 27 if(k==a.size()){ 28 break; 29 } 30 } 31 if(k==a.size()){ 32 return zero; 33 } 34 else{ 35 for(i=k;i<a.size();i++){ 36 min[i]=min[i]+'0'; 37 } 38 return min; 39 } 40 } 41 int main(){ 42 string times="0"; 43 string p,q,ss; 44 int n,i; 45 for(i=0;i<n;i++){ 46 cin>>p; 47 cin>>q; 48 } 49 while(ss-"0">0){ 50 ss=minus(p,q) 51 p=ss; 52 time=time+1; 53 } 54 cout<<time<<endl; 55 }
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 using namespace std; 5 char l1[300]; 6 char l2[300]; 7 int a1[300]; 8 int a2[300]; 9 int as[300]; 10 int sub(int *p1,int *p2,int nl1,int nl2){ 11 int i; 12 if(nl1<nl2){ 13 return -1; 14 } 15 if(nl1==nl2){ 16 for(i=nl1-1;i>=0;i--){ 17 if(p1[i]>p2[i]){ 18 break; 19 } 20 else if(p1[i]<p2[i]){ 21 return -1; 22 } 23 } 24 } 25 for(i=0;i<nl1;i++){ 26 p1[i]-=p2[i]; 27 if(p1[i]<0){ 28 p1[i]+=10; 29 p1[i+1]--; 30 } 31 } 32 for(i=nl1-1;i>=0;i--){ 33 if(p1[i]){ 34 return i+1; 35 } 36 return 0; 37 } 38 } 39 int main(){ 40 int t,n; 41 cin>>t; 42 for(n=0;n<t;n++){ 43 int i,j,n1,n2,nn; 44 cin>>l1; 45 cin>>l2; 46 n1=strlen(l1); 47 n2=strlen(l2); 48 nn=n1-n2; 49 memset(a1,0,sizeof(a1)); 50 memset(a2,0,sizeof(a2)); 51 memset(as,0,sizeof(as)); 52 for(j=0,i=n1-1;i>=0;i--){ 53 a1[j++]=l1[i]-'0'; 54 } 55 for(j=0,i=n2-1;i>=0;i--){ 56 a2[j++]=l2[i]-'0'; 57 } 58 if(n1<n2){ 59 cout<<"0"<<endl; 60 continue; 61 } 62 if(nn>0){ 63 for(i=n1-1;i>=nn;i--){ 64 a2[i]=a2[i-nn]; 65 } 66 for(;i>=0;i--){ 67 a2[i]=0; 68 } 69 n2=n1; 70 } 71 for(j=0;j<=nn;j++){ 72 int nt; 73 while((nt=sub(a1,a2+j,n1,n2-j))>=0) 74 { 75 n1=nt; 76 as[nn-j]++; 77 } 78 } 79 for(i=200;(i>=0)&&(as[i]==0);i--); 80 if(i>=0){ 81 for(;i>=0;i--){ 82 cout<<as[i]; 83 } 84 } 85 else{ 86 cout<<"0"; 87 } 88 cout<<endl; 89 } 90 return 0; 91 }