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