A除以B(PAT)

1.题目描述:

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

2.输入描述:

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

3.输出描述:

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

4.输入例子:

123456789050987654321 7

5.输出例子:

17636684150141093474 3

6.解题思路:

1. 定义字符串数组接收一个小于1000位的正整数;
2. 遍历输入的字符串,分为四种情况进行求商求余:

(一)A只有一位数,且该数<B,商为0,余为A
(二)A只有一位数,且该数>=B
(三)A为多位数,且遍历到的第i位数>=B,求A[i]的商和余,商值保存到数组Q中,余值赋值给A[i],遍历位置不继续递增,即i++,i–,遍历位置不动;
(四)A为多位数,且遍历到的第i位数<B,求A[i]和A[i+1]组成两位数的商和余,商值保存到数组Q中,余值赋值给A[i],遍历位置正常递增i++;

3.输出字符串数组Q和余数R。

7.源代码:

#include<stdio.h>
#define N 1001
int main()
{

	int i,j,B,R,num;
	char A[N]="\0",Q[N]="\0";
	scanf("%s%d",A,&B);

	for(i=0,j=0;A[i]!='\0';i++)	
	{
		if(A[i+1]!='\0'&&A[i]-48<B)
		{
			num=(A[i]-48)*10+(A[i+1]-48);
			Q[j]=(num/B)+48;
			A[i+1]=(num%B)+48;
			j++;
		}
		else
			if(A[i+1]!='\0'&&A[i]-48>=B)
			{
				Q[j]=((A[i]-48)/B)+48;
				A[i]=((A[i]-48)%B)+48;
				i--;
				j++;
			}
			else
				if(A[i+1]=='\0'&&A[i]-48<B)
					{
						R=A[i]-48;
						Q[0]=0;
					}
				else
					if(A[i+1]=='\0'&&A[i]-48>=B)
					{
						Q[j]=((A[i]-48)/B)+48;
						R=(A[i]-48)%B;
					}
	}
	printf("%s %d",Q,R);
	return 0;
}
全部评论

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务