大数除法并求余,目前没问题

#include<stdio.h>
#include<string.h>
int main()
{
	printf("输入exit退出"); 
	
	while(1)
	{
	printf("\n--------------------------------------------------------------------------\n");	
	char x1[100],y1[100];
	int x[100]={0},y[100]={0},z[100]={0};
	int xr,yr,i,j,sum=0,n1=0,n2=0,can=0,a;
	
	printf("输入1:\n");
	scanf("%s",x1);
	if(strcmp(x1,"exit")==0)
		return 0;
	printf("输入2:\n");
	scanf("%s",y1);
	if(strcmp(y1,"exit")==0)
		return 0;
	if(strcmp(y1,"0")==0)
		{
		printf("分母不能是0"); 
		continue;
		} 
		
	for(i=0;i<strlen(x1);i++)//把char转换成int 
		x[i]=x1[i]-'0'; 
	i--;	
	xr=i;	//记录尾下标
	for(j=0;j<strlen(y1);j++)
		y[j]=y1[j]-'0';
	j--;
	yr=j;

	//核心代码 ↓ 
	for(i=0;i<=xr-yr;)
	{	if(i>0 && x[i-1]>0)
			can=1;
		else
			for(j=0;j<=yr;j++)
			{	
				if(x[i+j]>y[j])//说明被除数大 
				{
					can=1;
					break;
				}
				if(x[i+j]<y[j])//说明除数大 
				{
					can=0;
					break;
				}
				if(j==yr)//说明两者一样 
				{
					can=1;
					break;
				}
			}
		if(can==1)
		{
			for(a=yr;a>=0;a--)
				{
					sum=x[i+a]-y[a];
					if(sum>=0)
						x[i+a]=sum;
					else
					{
						x[i+a]=10+sum;
						x[i+a-1]+=-1;
					}
				}
			z[i]+=1;
		}
		else
			i++;	
	}
	// ↑ 

	printf("结果\n商:");
	for(n1=0;z[n1]==0;n1++) ;	//找什么时候不是0开头
	if(n1>xr-yr)
		{
			printf("不能计算小数");
			continue;	
		}
	else	 
	for(i=n1;i<=xr-yr;i++) 
		printf("%d",z[i]);	
		
	printf("\n余数:");
	for(n1=0;x[n1]==0;n1++) ;	//找什么时候不是0开头 
	if(n1>xr)					//什么都不剩,所以余数是0 
		printf("%d",0);
	else
	for(i=n1;i<=xr;i++) 
		printf("%d",x[i]);		
	} 
} 

上一篇:【大象喝水】


下一篇:ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器