C++类,可以进行正整数之间的加减乘除,模,大小比较。输入输出用cin,cout;
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 const int MAXN = 410; 11 12 struct bign 13 { 14 int len, s[MAXN]; 15 bign () 16 { 17 memset(s, 0, sizeof(s)); 18 len = 1; 19 } 20 bign (int num) { *this = num; } 21 bign (const char *num) { *this = num; } 22 bign operator = (const int num) 23 { 24 char s[MAXN]; 25 sprintf(s, "%d", num); 26 *this = s; 27 return *this; 28 } 29 bign operator = (const char *num) 30 { 31 for(int i = 0; num[i] == '0'; num++) ; //去前导0 32 len = strlen(num); 33 for(int i = 0; i < len; i++) s[i] = num[len-i-1] - '0'; 34 return *this; 35 } 36 bign operator + (const bign &b) const //+ 37 { 38 bign c; 39 c.len = 0; 40 for(int i = 0, g = 0; g || i < max(len, b.len); i++) 41 { 42 int x = g; 43 if(i < len) x += s[i]; 44 if(i < b.len) x += b.s[i]; 45 c.s[c.len++] = x % 10; 46 g = x / 10; 47 } 48 return c; 49 } 50 void clean() 51 { 52 while(len > 1 && !s[len-1]) len--; 53 } 54 bign operator * (const bign &b) //* 55 { 56 bign c; 57 c.len = len + b.len; 58 for(int i = 0; i < len; i++) 59 { 60 for(int j = 0; j < b.len; j++) 61 { 62 c.s[i+j] += s[i] * b.s[j]; 63 } 64 } 65 for(int i = 0; i < c.len; i++) 66 { 67 c.s[i+1] += c.s[i]/10; 68 c.s[i] %= 10; 69 } 70 c.clean(); 71 return c; 72 } 73 bign operator - (const bign &b) 74 { 75 bign c; 76 c.len = 0; 77 for(int i = 0, g = 0; i < len; i++) 78 { 79 int x = s[i] - g; 80 if(i < b.len) x -= b.s[i]; 81 if(x >= 0) g = 0; 82 else 83 { 84 g = 1; 85 x += 10; 86 } 87 c.s[c.len++] = x; 88 } 89 c.clean(); 90 return c; 91 } 92 bign operator / (const bign &b) 93 { 94 bign c, f = 0; 95 for(int i = len-1; i >= 0; i--) 96 { 97 f = f*10; 98 f.s[0] = s[i]; 99 while(f >= b)100 {101 f -= b;102 c.s[i]++;103 }104 }105 c.len = len;106 c.clean();107 return c;108 }109 bign operator % (const bign &b)110 {111 bign r = *this / b;112 r = *this - r*b;113 return r;114 }115 bool operator < (const bign &b)116 {117 if(len != b.len) return len < b.len;118 for(int i = len-1; i >= 0; i--)119 {120 if(s[i] != b.s[i]) return s[i] < b.s[i];121 }122 return false;123 }124 bool operator > (const bign &b)125 {126 if(len != b.len) return len > b.len;127 for(int i = len-1; i >= 0; i--)128 {129 if(s[i] != b.s[i]) return s[i] > b.s[i];130 }131 return false;132 }133 bool operator == (const bign &b)134 {135 return !(*this > b) && !(*this < b);136 }137 bool operator != (const bign &b)138 {139 return !(*this == b);140 }141 bool operator <= (const bign &b)142 {143 return *this < b || *this == b;144 }145 bool operator >= (const bign &b)146 {147 return *this > b || *this == b;148 }149 string str() const150 {151 string res = "";152 for(int i = 0; i < len; i++) res = char(s[i]+'0') + res;153 return res;154 }155 };156 157 istream& operator >> (istream &in, bign &x)158 {159 string s;160 in >> s;161 x = s.c_str();162 return in;163 }164 165 ostream& operator << (ostream &out, const bign &x)166 {167 out << x.str();168 return out;169 }
JAVA BigInteger类。
函数:
valueOf(parament); 将参数转换为制定的类型
比如 int a=3;
BigInteger b=BigInteger.valueOf(a);
则b=3;
String s=”12345”;
BigInteger c=BigInteger.valueOf(s);
则c=12345;
add(); subtract(); multiply(); divide(); pow();
gcd(); abs(); mod(); max(); min(); equals();
1 import java.math.BigInteger; 2 import java.util.Scanner; 3 public class Main { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 BigInteger a,b,c; 8 Scanner cin=new Scanner(System.in); 9 while(cin.hasNext())10 {11 a=cin.nextBigInteger();12 b=cin.nextBigInteger();13 c=a.max(b);14 System.out.println(c);15 }16 }17 18 }
参考文章: