题目
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
结尾无空行
输出样例:
17636684150141093474 3
结尾无空行
解题思路
- 读入A和B;
- 分类计算,如果是两个一位数相除,则直接输出,不涉及余数留给下一位进行运算的情况;若不是两个一位数相除,则需要遍历A的每一位进行依次运算;
- 按照格式输出。
难点
本题需要注意之处有以下3点:
- 商若非0,那么在第一位非0位之前的0不需要输出;
- 余数在运算下一位时作(*10)后使用;
- 字符类型(char)和实际运算所使用的整型(int)之间要注意转换。
代码
#include<stdio.h>
#include<string.h>
int main(){
char a[1001];//a是不超过 1000 位的正整数
int i,temp,b,k = 0;//b是1位正整数,k记录c的位数
int rem,c[1005];//rem是余数,c存放结果
int isprint = 0;//是否有第一位非0数字输出的标记变量
scanf("%s %d",a,&b);
int len = strlen(a);
if (len==1)
printf("%d %d",(a[0]-48)/b,(a[0]-48)%b);
else
{
rem = 0;
for (i=0;i<len;i++)
{
temp = rem*10+a[i]-48;
c[k++] = temp/b;
rem = temp%b;
}
for (i=0;i<k;i++)
{
if (c[i]==0 && isprint==0)
continue;
else
{
printf("%d",c[i]);
isprint = 1;
}
}
printf(" %d",rem);
}
return 0;
}
最后
以上就是怕黑面包最近收集整理的关于PAT乙级1017:A除以B(20)的全部内容,更多相关PAT乙级1017内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复