- 時間限制:
- 1000ms
- 內存限制:
- 65536kB
- 描述
- 求2個大的正整數相除的商
- 輸入
- 第1行是測試數據的組數n,每組測試數據佔2行,第1行是被除數,第2行是除數。每組測試數據之間有一個空行,每行數據不超過100個字符
- 輸出
- n行,每組測試數據有一行輸出是相應的整數商
- 樣例輸入
-
3
2405337312963373359009260457742057439230496493930355595797660791082739646
2987192585318701752584429931160870372907079248971095012509790550883793197894
10000000000000000000000000000000000000000
10000000000
5409656775097850895687056798068970934546546575676768678435435345
1
- 樣例輸出
-
0
1000000000000000000000000000000
5409656775097850895687056798068970934546546575676768678435435345
- 提示
- 思路用數組存比如12345/3
- 12345/30000 12345/3000 9345/3000 6345/3000 3345/3000 ......
- 代碼實現
#include<stdio.h>
#include<string.h>
int main()
{
int a[1000],b[1000],c[1000],i,j,k1,k2,n,m,count,flag,flag1,k;
char st1[1000],st2[1000];
scanf("%d",&n);
while(n--)
{
scanf("%s%s",st1,st2);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
k1=strlen(st1);
k=k1;
k2=strlen(st2);
if(k1<k2) {printf("0\n");continue;}
for(i=0;i<=k1-1;i++)
a[i]=st1[k1-i-1]-'0';
m=k1-k2;
for(i=0;i<=k2-1;i++)
b[i+m]=st2[k2-i-1]-'0';
count=0;
while(count<=m)
{
flag=1;
if(k1<k2+m-count) flag=0;
if(k1==k2+m-count)
{
flag1=0;
for(j=k1-1;j>=0&&flag1==0;j--)
{
if(a[j]>b[j+count]) flag1=1;
else
if(a[j]<b[j+count])
flag=0;
}
}
if(flag==1)
{
for(i=0;i<=k1-1;i++)
{
a[i]=a[i]-b[i+count];
if(a[i]<0)
{
a[i+1]--;
a[i]+=10;
}
}
while(a[k1-1]==0&&k1>=1) k1--;
}
if(flag==1) c[m-count]++;
if(flag==0) count++;
}
i=k;
while(c[i]==0&&i>0)
{
i--;
}
for(k=i;k>=0;k--)
printf("%d",c[k]);
printf("\n");
}
return 0;
}