798236606 发表于 2020-2-1 10:37:51

PTA B_1017 A除以B

传送门:https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552

解:
#include<cstdio>
#include<cstring>

typedef struct BIGN{
    int num;
    int len;
    bool is_neg;
   
    BIGN()
    {
      memset(num, 0, sizeof(num));
      len = 0;
      is_neg = false;
    };
}bign;

bign str2bign(char *s)
{
    bign a;
   
    a.len = strlen(s);
   
    if (s == '-')
    {
      a.is_neg = true;
      a.len--;
      s++;
    }
   
    for (int i = 0; i < a.len; i++)
      a.num = s - '0';
      
    return a;
}

void print_bign(bign a)
    if (a.is_neg)
      putchar('-');
      
    for (int i = a.len - 1; i >= 0; i--)
      printf("%d", a.num);
}

bign divi(bign a, int b, int &r)
{
    bign c;
   
    if (!b)
    {
      puts("0 can not be divisor!!");
      
      return c;
    }
   
    if (a.is_neg + (b < 0) == 1)
      c.is_neg = true;
      
    if (b < 0)
      b = -b;
   
    c.len = a.len;   
    for (int i = a.len - 1; i >= 0; i--)
    {
      r = r * 10 + a.num;
      c.num = r / b;
      r = r % b;
    }
   
    while (c.len > 1 && !c.num)
      c.len--;

    return c;
}

int main(void)
{
    int r = 0, b;
    char s;

    scanf("%s %d", s, &b);

    bign a = str2bign(s);

    print_bign(divi(a, b, r));

    printf(" %d", r);
}
页: [1]
查看完整版本: PTA B_1017 A除以B