百炼 2737:大整数除法

本文详细介绍了如何实现大整数除法运算,包括算法思路、代码实现及实例解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2737:大整数除法

时间限制:
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值