两个方案,第一边除一边输出。第二个是除完得商,先保存,再输出。
思路
用数组储存A(A 是不超过 1000 位的正整数)可能很大。按照基本除法一位一位除,得商输出
#include <stdio.h>
#define MAX_A 1000
int A[MAX_A];
int B; /* 除数 */
int num; /* A 被除数有多少位 */
void read_AB();
void division_print();
/******************** 读入A读如A[],和B *************************/
void read_AB(){
int c;
for(num = 0; (c = getchar()) != ' '; ++num)
A[num] = (c - '0');
B = (getchar() - '0');
}
/*********************** 做除法,并输出 **************************/
void division_print(){
int d; /* 被除数 dividend*/
int r; /* 余数 remainder */
int Q; /* 商 */
if(num == 1 && A[0] < B){ /* A 只有一位且还小于B(除数)*/
printf("0");
r = A[0];
}else{
d = r = 0;
for(int j = 0; j < num; ++j){
d = r*10 + A[j]; /* 将A分解,被除数 = 上一次的余数*10 + 当前A中的某位 */
Q = d / B;
r = d % B;
if(j == 0 ){
if(Q != 0)
printf("%d", Q);
}else
printf("%d", Q);
}
}
printf(" ");
printf("%d", r);
}
int main(){
int i;
B = 0;
for(i = 0; i < MAX_A; ++i)
A[i] = 0;
read_AB();
division_print(); /* 一边除一边输出 */
}
下边这个是把商保存了,再输出
#include <stdio.h>
#define MAX_A 1000
int A[MAX_A];
int Q[MAX_A];
int B; /* 除数 */
int num; /* A 被除数有多少位 */
int j; /* Q 商有多少位 */
void read_AB();
int division();
void print_result(int R);
/******************** 读入A读如A[],和B *************************/
void read_AB(){
int c;
for(num = 0; (c = getchar()) != ' '; ++num)
A[num] = (c - '0');
B = (getchar() - '0');
}
/************************** 做除法 ****************************/
int division(){
int d; /* 被除数 dividend*/
int r; /* 余数 remainder */
d = r = 0;
for(j = 0; j < num; ++j){
d = r*10 + A[j]; /* 将A分解,被除数 = 上一次的余数*10 + 当前A中的某位 */
if(d >= B){ /* 被除数大于等于除数 */
Q[j] = d / B;
r = d % B;
}else{ /* 被除数小于除数 */
Q[j] = 0;
r = A[j];
}
}
return r; /* 返回余数 */
}
/*********************** 输出结果 ****************************/
void print_result(int R){
int i;
if(Q[0] == 0 && Q[1] == 0) /* A < B,它的商为零 */
printf("0");
else{ /* A >= B */
i = 0;
if(Q[i] == 0) /* 排除商的第一位为零 */
++i;
for(; i < j; ++i) /* 当还没有输出完所有的商 */
printf("%d", Q[i]);
}
printf(" ");
printf("%d", R); /* 输出余数 */
}
int main(){
int i;
B = 0;
for(i = 0; i < MAX_A; ++i){
A[i] = 0;
Q[i] = 0;
}
read_AB();
i = division(); /* 余数 */
print_result(i); /* 把余数传进去输出结果 */
}