1017. A除以B (20)--PAT乙级

来源:互联网 发布:android调用js方法 编辑:程序博客网 时间:2024/06/05 20:20

1017. A除以B (20)

时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入格式:

输入在1行中依次给出A和B,中间以1空格分隔。

输出格式:

在1行中依次输出Q和R,中间以1空格分隔。

输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
分析:字符串模拟除法
代码:
/*高精度除低精度求商模板*//*大数除法 ------除数为int范围*/#include<iostream>#include<cstring> #include<string>using namespace std;const int N=1000+50;void division(char * src, int n){    int len = strlen(src), i, k, t = 0, s = 0;    char dest[N]={'0'};//商     bool flag = true;    //商是否有了第一个有效位,防止商首部一直出现0        for(i = 0, k = 0; i < len; i++)    {        t = s * 10 + (src[i] - '0');    //新余数        if(t / n > 0)        //余数为0要修改商        {            dest[k++] = t / n + '0';s = t % n;flag = false;        }       else                    //不够除,修改余数        {            s = t;            if(!flag)            //商已经有有效位了,补零                dest[k++] = '0';        }    }    if(dest[0] == '0')//商为0 {k++;}    dest[k] = '\0';    printf("%s %d\n", dest, s);}int main(){  char num[N];//被除数   int n;//除数   scanf("%s%d", num, &n);  division(num, n);}
原创粉丝点击