C++大数模板 BigInteger
2013-08-11 10:56
369 查看
网上搜集的一份写的灰常漂亮的大数模板。Mark之~~~~
看不懂的自行补脑了 +_+
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct BigInteger{
int A[25];
enum{MOD = 10000};
BigInteger(){memset(A, 0, sizeof(A)); A[0]=1;}
void set(int x){memset(A, 0, sizeof(A)); A[0]=1; A[1]=x;}
void print(){
printf("%d", A[A[0]]);
for (int i=A[0]-1; i>0; i--){
if (A[i]==0){printf("0000"); continue;}
for (int k=10; k*A[i]<MOD; k*=10) printf("0");
printf("%d", A[i]);
}
printf("\n");
}
int& operator [] (int p) {return A[p];}
const int& operator [] (int p) const {return A[p];}
BigInteger operator + (const BigInteger& B){
BigInteger C;
C[0]=max(A[0], B[0]);
for (int i=1; i<=C[0]; i++)
C[i]+=A[i]+B[i], C[i+1]+=C[i]/MOD, C[i]%=MOD;
if (C[C[0]+1] > 0) C[0]++;
return C;
}
BigInteger operator * (const BigInteger& B){
BigInteger C;
C[0]=A[0]+B[0];
for (int i=1; i<=A[0]; i++)
for (int j=1; j<=B[0]; j++){
C[i+j-1]+=A[i]*B[j], C[i+j]+=C[i+j-1]/MOD, C[i+j-1]%=MOD;
}
if (C[C[0]] == 0) C[0]--;
return C;
}
};
int main() {
BigInteger a, b;
a.set(1); b.set(1);
(a+b).print();
return 0;
}
看不懂的自行补脑了 +_+
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct BigInteger{
int A[25];
enum{MOD = 10000};
BigInteger(){memset(A, 0, sizeof(A)); A[0]=1;}
void set(int x){memset(A, 0, sizeof(A)); A[0]=1; A[1]=x;}
void print(){
printf("%d", A[A[0]]);
for (int i=A[0]-1; i>0; i--){
if (A[i]==0){printf("0000"); continue;}
for (int k=10; k*A[i]<MOD; k*=10) printf("0");
printf("%d", A[i]);
}
printf("\n");
}
int& operator [] (int p) {return A[p];}
const int& operator [] (int p) const {return A[p];}
BigInteger operator + (const BigInteger& B){
BigInteger C;
C[0]=max(A[0], B[0]);
for (int i=1; i<=C[0]; i++)
C[i]+=A[i]+B[i], C[i+1]+=C[i]/MOD, C[i]%=MOD;
if (C[C[0]+1] > 0) C[0]++;
return C;
}
BigInteger operator * (const BigInteger& B){
BigInteger C;
C[0]=A[0]+B[0];
for (int i=1; i<=A[0]; i++)
for (int j=1; j<=B[0]; j++){
C[i+j-1]+=A[i]*B[j], C[i+j]+=C[i+j-1]/MOD, C[i+j-1]%=MOD;
}
if (C[C[0]] == 0) C[0]--;
return C;
}
};
int main() {
BigInteger a, b;
a.set(1); b.set(1);
(a+b).print();
return 0;
}
相关文章推荐
- 【Java】-BigInteger大数类的使用【超强Java大数模板 总结】
- 【正整数模板运算(C++手写BigInteger类和java.math.BigInteger以及java.math.BigDecimal)】
- C++ BigInteger模板
- C++ BigInteger 结构体 模板
- c++ BigInteger模板 非常好的板子
- 刘汝佳 BigInteger 大数模板
- C++ BigInteger模板
- C++ 大数模板
- JAVA大数处理(BigInteger,BigDecimal)
- hdu4762Cut the Cake(概率+大数操作(java)+C++高精度模板)
- 探寻C/C++中更快的大数(自然数集)模板
- JAVA 大数(BigInteger) 归纳总结
- Big Integer 大数求模
- [中等] 比较完整的BigInteger高精度整数类(C++实现)
- java常用类库续2(大数操作BigInteger、BigDecimal类、对象克隆技术、Arrays类)
- C++ 大数类 大数模板
- JAVA 大数(BigInteger) 归纳总结 .
- 【java】BigDecimal、BigInteger、大数相乘、数值的整数次方、快速乘法
- c++大数模板
- java大数BigInteger总结