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

来源:互联网 发布:做美篇的软件 编辑:程序博客网 时间:2024/06/05 07:50

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

题意

给两个数A, B

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

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

分析

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

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

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

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

(哇,这个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;}

小结

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

原创粉丝点击