• 重载运算符加减乘除170312


     1 #include <cstdio>
     2 #include <cstring>
     3 //2017.3.12
     4 int max(int a,int b){return a >= b ? a : b;}
     5 struct bignum{
     6     int data[1001],len;
     7     bignum(){len = 1;memset(data,0,sizeof(data));}
     8 };
     9 void operator==(bignum &a,int b){ 
    10     int t,i = 0;
    11     int tmp[1001];
    12     while(b > 0){
    13         i++;
    14         t = b % 10;
    15         tmp[i] = t;
    16         b = (b - t) / 10;
    17     }
    18     for(int j = 1;j <= i;j++){
    19         a.data[j] = tmp[j];
    20     }
    21     a.len = i;
    22 }
    23 bignum operator-(bignum a,bignum b){
    24     bignum c;
    25     c.len = max(a.len,b.len);
    26     for(int i = 1;i <= c.len;i++){
    27         if(a.data[i] < b.data[i])
    28             a.data[i] += 10,a.data[i + 1]--;
    29         c.data[i] = a.data[i] - b.data[i];
    30     }
    31     if(c.data[c.len] == 0)c.len--;
    32     return c;
    33 }
    34 void operator-=(bignum &a,bignum b){
    35     a = a - b;
    36 }
    37 bignum operator/(bignum a,int b){
    38     int d = 0;
    39     for(int i = a.len;i >= 1;i--) 
    40     {
    41         d = d * 10 + a.data[i]; 
    42         a.data[i] = d / b;
    43         d = d % b; 
    44     }
    45     while(a.data[a.len] == 0 && a.len > 1) a.len--; 
    46     return a;
    47 }
    48 void operator/=(bignum &a,int b){
    49     a = a / b;
    50 }
    51 bignum operator+(bignum a,bignum b){
    52     bignum c;
    53     c.len = max(a.len,b.len);
    54     for(int i = 1;i <= c.len;i++){
    55         c.data[i] += a.data[i] + b.data[i];
    56         if(c.data[i] >= 10){
    57             c.data[i] %= 10;
    58             c.data[i + 1]++;
    59         }
    60     }
    61     if(c.data[c.len + 1] > 0)c.len++;
    62     return c;
    63 }
    64 void operator+=(bignum &a,bignum b){
    65     a = a + b;
    66 }
    67 bignum operator*(bignum a,bignum b){
    68     bignum c;
    69     c.len = a.len + b.len;
    70     for(int i = 1;i <= a.len;i++){
    71         for(int j = 1;j <= b.len;j++){
    72             c.data[i+j-1] += a.data[i] * b.data[j];
    73             if(c.data[i+j-1] >= 10){
    74                 c.data[i+j] += c.data[i+j-1] / 10;
    75                 c.data[i+j-1] %= 10;
    76             }
    77         }
    78     }
    79     if(c.data[c.len] == 0)c.len--;
    80     return c;
    81 }
    82 void operator*=(bignum &a,bignum b){
    83     a = a * b;
    84 }
    85 void get(bignum &a){
    86     char x[10001];
    87     scanf("%s",x + 1);a.len = strlen(x + 1);
    88     for(int i = 1;i <= a.len;i++){
    89         a.data[a.len - i + 1] = x[i] - '0';
    90     }
    91 }
    92 void put(bignum a){
    93     for(int i = a.len;i >= 1;i--)
    94         printf("%d",a.data[i]);
    95 }
  • 相关阅读:
    『Python』进程同步
    『Python』多进程
    『GoLang』协程与通道
    『GoLang』错误处理
    『码农翻身』语言的学习
    『GoLang』fmt包的使用
    异或运算符(^)、与运算符(&)、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)
    HTML DOM focus() 方法
    JavaScript中的indexOf使用方法
    HTML 5 中的textarea标签
  • 原文地址:https://www.cnblogs.com/frankying/p/6582076.html
Copyright © 2020-2023  润新知