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;
}