PAT乙级-A除以B

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入格式:

输入在1行中依次给出A和B,中间以1空格分隔。

输出格式:

在1行中依次输出Q和R,中间以1空格分隔。

输入样例:
123456789050987654321 7
输出样例:

17636684150141093474 3

------------------------------------------------

用字符数组实现多位数的除法。

刚开始使用sizeof求数组的大小,结果每次都乱码,发现size每次都是1001,所以又改成strlen求数组大小。

需要注意的是,结果第一位的0不输出,但如果结果是0则要输出一个0。

#include <iostream>
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
//先用除法定理进行计算 
int main(int argc, char** argv) {
	char a[1001],re[1001];
	int b;
	cin>>a>>b;
	int size=strlen(a);
	int i=0,j=0;
	int qq;
	qq=a[i++]-'0';
	//第一位除以b,小于b加一位,除完商加结果,与加下一位
	while(i<size)
	{
		if(qq<b)
		{
			
			qq=qq*10+(a[i]-'0');	
			re[j++]='0';
		
		}
		else
		{
			re[j++]=qq/b+'0';
			qq=qq%b*10+(a[i]-'0');
		}
		i++;
	 } 
	 re[j++]=qq/b+'0';
    qq=qq%b;
    int first=0;
    for(int i=0;i<j;i++)
    {
    	if(re[i]=='0'&&first==0)
    	{
    		continue;
		}
		else
		{
			cout<<re[i];
			first=1;
		}
	}
	if(first==0)
	{
		cout<<0;
	}
	cout<<" "<<qq;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32835707/article/details/60133919