PAT-B] 1017. A除以B [模拟]

链接:1017. A除以B (20)

题意

给两个数A, B

其中,A长度不超过1000位的大数(正整数)。B长度为1的正整数

然后求出 $A/B$ 的商$Q$和余数$R$。

分析

首先看到A这么长用long double也存不下,立即用字符串存储
同理,B只有一位,那求出来的商Q也很长,也必须使用字符串

然后就是要解决怎么除的问题了。

这个问题呢,其实不难。直接模拟做除法的过程就可以了。
没想起来的话可以自己在草稿本上写一写。

比如被除数A1234, 除数B3,我们可以得到下面这样的过程。

(哇,这个Latex怎么写除法啊)

总之,在草稿本上写一写应该就出来了!

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <cstdio>
char A[1005], Q[1005];
int main()
{
int B;
while( ~scanf( "%s %d", A, &B ) ){
if( B == 1 ){
printf( "%s 0\n", A );
continue;
}
int R = 0, i = 0, j = 0;
if( A[0] - '0' < B ){
R = ( A[0] - '0' ) % B;
Q[0] = '0';
i++;
}
for( ; A[i] != '\0'; i++ ){
R = R * 10 + A[i] - '0';
if( R < B ){
Q[j++] = '0';
continue;
}
Q[j++] = R / B + '0';
R = R % B;
}
if( j ) Q[j] = '\0';
else Q[j + 1] = '\0';
printf( "%s %d\n", Q, R );
}
return 0;
}

小结

模拟除法。其实挺简单的。