PAT1017 A除以B

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

题目分析

1.不超过1000位的正整数:int ,long,long long都无法完全包含,只能用数组存放

代码设计

一.存储数据

​
char number[1001];
    int len,i=0,b;
    while((number[i++]=getchar())!=' ');//这里用getchar将A储存进number
    number[i-1]='\0';
    scanf("%d",&b);
    len=strlen(number);
    int num[len],q[len],R;
    for(i=0;i<len;i++)          //这里通过字符和数字的ASCII关系,将字符转换为数字存储
    	num[i]=number[i]-'0';

​

这一段代码我参考了别人的思想:先用字符数组存放大数,再将字符数组转换为int型数组

二.除法

int temp1=0,temp2=0,count=0; //count是计数器对输出有用
    for(i=0;i<len;i++)
    {
    	temp1=(num[i]+temp2*10)/b;  //temp1存放每次除完后的商
		temp2=(num[i]+temp2*10)%b;  //temp2存放每次除完后的余数
		q[count++]=temp1;
		if(i==len-1) R=temp2;
    }

三.输出

有两个坑:1.当商为多位时,如01123151,则不输出第一个数组成员

                   2.当商为一位时,输出即可(我一开始未考虑到一位的情况)

for(i=0;i<len;i++) 
	{
		if(count>1) //这里count表示商的位数
		{
			if(q[i]!=0&&i==0) printf("%d",q[i]);//这里是对第一个坑的限制
		    if(i>0) printf("%d",q[i]);
		}
		if(count==1) printf("%d",q[i]);
		
	}
    printf(" %d",R);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值