题意
给两个数A, B
。
其中,A
为长度不超过1000位的大数(正整数)。B
为长度为1的正整数
然后求出
A/B
的商
Q
和余数
分析
首先看到A
这么长用long double
也存不下,立即用字符串存储。
同理,B
只有一位,那求出来的商Q
也很长,也必须使用字符串。
然后就是要解决怎么除的问题了。
这个问题呢,其实不难。直接模拟做除法的过程就可以了。
没想起来的话可以自己在草稿本上写一写。
比如被除数A
为1234
, 除数B
为3
,我们可以得到下面这样的过程。
(哇,这个Latex怎么写除法啊)
总之,在草稿本上写一写应该就出来了!
代码
#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;
}
小结
模拟除法。其实挺简单的。