高精除

来源:互联网 发布:复制别人的淘宝店铺 编辑:程序博客网 时间:2024/06/11 00:52
#include <cstdio>#include <iostream>#include <cstring>#include <string>using namespace std;int a[101], b[101], c[101], la, lb, lc;void init(int a[]) //这里的a[]相当于一个变量,实际上输出的可以输数组b或者数组c,不能省略{    string s;    cin >> s;    a[0] = s.length();    for (int i = 1; i <= a[0]; i++)    {        a[i] = s[a[0] - i] - '0';    }}void print(int a[]){    if (a[0] == 0)    {        printf("0\n");    }    for (int i = a[0]; i >= 1; i--)    {        printf("%d", a[i]);    }    printf("\n");    return;}int compare (int a[], int b[]){    if (a[0] > b[0]) return 1;    if (a[0] < b[0]) return -1;    for (int i = a[0]; i > 0; i--)    {        if (a[i] > b[i]) return 1;        if (a[i] < b[i]) return -1;    }    return 0;}void jian(int a[], int b[]){    int flag = compare(a, b);    if (flag == 0)    {        a[0] = 0;        return;    }    if (flag == 1)    {        for (int i = 1; i <= a[0]; i++)        {            if (a[i] < b[i])            {                a[i + 1]--;                a[i] += 10;            }            a[i] -= b[i];        }        while (a[0] > 0 && a[a[0]] == 0) a[0]--;        return;    }}void numcpy(int p[], int q[], int det) //复制p数组到q数组从det开始的地方{    for (int i = 1; i <= p[0]; i++)    {        q[i + det - 1] = p[i];    }    q[0] = p[0] + det - 1;}void chugao(int a[], int b[], int c[]){    int tmp[101];    c[0] = a[0] - b[0] + 1; //一定吗?    for (int i = c[0]; i > 0; i--)    {        memset(tmp, 0, sizeof(tmp));        numcpy(b, tmp, i);        while (compare(a, tmp) >= 0)        {            c[i]++;            jian(a, tmp);        }    }    while (c[0] > 0 && c[c[0]] == 0) c[0]--;    return;}int main(){    init(a);    init(b);    chugao(a, b, c);    print(c); //print(a); //余数    return 0;}

代码大部分是信息学奥赛一本通上的,输入输出啥的我自己稍微改了一下,感觉比他写得好看。
忘函数里传数组真的很强,并且他把数组长度存在了a[0]里,我原先觉得这样很不规范(蒟蒻的碎碎念),后来发现这样就能一起传进函数里了, 超强= =

【高精度就这样了。。。。。基本思想。。。还是知道的吧。。考场上如果有大空。。。应该能磨叽出来(:з」∠)不想看了,应该大丈夫!】

0 0