本题要求计算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; }