• 带余除法


    【题目描述】

    给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。

    【输入】

    一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔开。

    【输出】

    一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

    【输入样例】

    10 3

    【输出样例】

    3 1
    代码:
    #include<bits/stdc++.h>
    using namespace std;
    int c[405],a[405],b[405];
    int hh=0;
    void divide_read(int a[])
    {
    	string str;
    	cin>>str;
    	a[0]=str.length();//为了省空间 嗯~ 
    	for(int i=1;i<=a[0];i++)
    	{
    		a[i]=str[a[0]-i]-'0';//存储
    	}
    }
    void divide_write(int a[])
    {
    	if(a[0]==0)//输出就不用说了 
    	{
    		cout<<0<<endl;
    		return ;
    	}
    	for(int i=a[0];i>0;i--) cout<<a[i];
    	cout<<endl;
    	return ;
    }
    int cmp(int a[],int b[])
    {
    	if(a[0]>b[0]) return 1;//除数比被除数大 
    	if(a[0]<b[0]) return -1;//除数比被除数小,%操作时直接输出 
    	for(int i=a[0];i>0;i--)
    	{
    		if(a[i]>b[i]) return 1;//一位一位的判断 
    		if(a[i]<b[i]) return -1;
    	}
    	return 0;
    }
    void jian(int a[],int b[])//计算a=a-b 
    {
    	int flag=cmp(a,b);
    	if(flag==0) 
    	{
    		a[0]=0;
    		return ;
    	}
    	if(flag==1)//除数比被除数大
    	{
    		for(int i=1;i<=a[0];i++)
    		{
    			if(a[i]<b[i])//借位 
    			{
    				a[i+1]--;
    				a[i]+=10;
    			}
    			a[i]-=b[i];
    		}
    		while(a[0]>0&&a[a[0]]==0) a[0]--;//去0 
    		return ;
    	}
    }
    void num(int p[],int q[],int det)//复制p数组到q数组det开始的地方,这样就不会影响%的操作 
    {
    	for(int i=1;i<=p[0];i++) q[i+det-1]=p[i];
    	q[0]=p[0]+det-1;
    }
    void divide(int a[],int b[],int c[])
    {
    	int tmp[404];
    	c[0]=a[0]-b[0]+1;//商的位数
    	for(int i=c[0];i>0;i--)
    	{
    		memset(tmp,0,sizeof(tmp));//清零
    		num(b,tmp,i);//复制
    		while(cmp(a,tmp)>=0)
    		{
    			c[i]++;
    			jian(a,tmp);//计算,模拟
    		}
    	}
    	while(c[0]>0&&c[c[0]]==0) c[0]--;//去0 
    	return ;
    }
    int main()
    {
    	int maxn=0;
    	memset(a,0,sizeof(a));
    	memset(b,0,sizeof(b));
    	memset(c,0,sizeof(c));
    	divide_read(a);
    	divide_read(b);
    	divide(a,b,c);
    	divide_write(c);
    	divide_write(a);
    	return 0;
    }
    

      

  • 相关阅读:
    使用FolderBrowserDialog组件选择文件夹
    使用OpenFileDialog组件打开多个文
    使用OpenFileDialog组件打开对话框
    获取弹出对话框的相关返回值
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1137 Final Grading (25 分)
    PAT 甲级 1137 Final Grading (25 分)
  • 原文地址:https://www.cnblogs.com/dai-jia-ye/p/9264107.html
Copyright © 2020-2023  润新知