PAT (Basic Level) 1017 A除以B

题目:

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

输入格式:

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

输出格式:

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

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

思路:

首先,题目这句“A=B×Q+R”有点废话,哈哈哈哈

其次,A是不超过1000位的正整数,别说int类型,就是long long这个8字节的类型也远远存放不了1000位的正整数呀,所以,毫无疑问,用数组来存放。

最后,就是这么除的问题了,其实,我们数学上除法竖式是怎么运算的,这题就是怎么运算的。

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1010 
/**
**A除以B 
**@author Fhujinwu
*/
int main()
{
    char a[MAX],v[MAX];//a存放被除数,v存放商 
    int b,n,k,rest,i;
    scanf("%s%d",a,&b);
    int len=strlen(a);
    /*rest为每次除运算的余数,
	**表示商的位数k初始化为0*/ 
	rest=k=0;          
    for(i=0;i<len;i++)
    {
    	n=10*rest+(a[i]-'0');
    	//printf("%d\n",n);
		if(n>=b||i==len-1){//如果足够除或到达了各位,则可以进行除运算 
			v[k++]=n/b;
			rest=n%b;
		}else{
			if(i!=0)  //第一位不够时不补0,其他补零
			    v[k++]=0;
			int n1=n*10+(a[++i]-'0');//高位乘10加上本位
			//printf("%d\n",n);
			v[k++]=n1/b;
			rest=n1%b; 
		} 
	}
	for(i=0;i<k;i++)
	   printf("%d",v[i]);
	printf(" %d",rest);
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值