PAT 乙等 1017 C语言

来源:互联网 发布:鼎捷软件股份有限公司 编辑:程序博客网 时间:2024/05/16 18:05

1017. A除以B (20)


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

输入格式:

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

输出格式:

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

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


思路:只能用字符串一位一位转化为数字处理。被除数从字符串左侧起转化一位除以除数,若有余数乘10留到下一位,否则为零,余数乘10留到下一位。注意若第一位被除数小于除数不能输出零,必须有非零位输出后才可以输出0

一、起始变量

1.除数divider,被除数dibideder,每位余数left

2.flag标志位,用来标记是否有商的非零位输出

二、运算

1.读入被除数和除数。

2.在for循环中一位一位转化被除数,转化一位除以被除数,若非零输出,若为零,在已经有非零位商输出的前提下输出,否则不输出。

3.若有余数乘10留到下一位

4.若flag一直为0,则说明被除数小于除数,输出0

三、代码

#include "stdio.h"#include "string.h"int main(){char divideder[1001];int divider;int flag = 0;//是否有非零位商输出,在没有非零位输出之前0不输出; int i;int left = 0;//每位整除之后的余数; scanf("%s %d", divideder, ÷r);int len = strlen(divideder);//如果被除数为0,直接得结果; for(i = 0; i < len; i++){left = left*10 + divideder[i] - '0';if(left >= divider){printf("%d",left / divider);flag = 1;//输出商,并改变flag的值,flag是是否有一位的商被输出的标志 }else if(flag){printf("0");//商的第一位输出后,且被除数的第i位小于除数,则输出0; }left = left % divider;//得到余数 }if(flag == 0){printf("0");}//被除数只有一位且小于除数; printf(" %d",left);return 0;}


0 0