高精
2016-04-30 14:03
295 查看
struct BigN{
#define maxlen (1005)
#define base (10000)
int len, A[maxlen];
BigN():len(1){A[0] = 0;}
BigN(const int x):len(1){A[0] = x;}
void operator *= (const int x){
int slid = 0, i;
for(i = 0;i < len;++i){
A[i] = A[i] * x + slid;
slid = A[i] / base;
A[i] %= base;
}
while(slid){
A[i] = slid;
slid = A[i] / base;
A[i++] %= base;
}
len = i;
}
void operator /= (const int x){
for(int i = len - 1;i;--i){
A[i-1] += A[i] % x * base;
A[i] /= x;
}
A[0] /= x;
while(len > 1 && !A[len - 1])--len;
}
bool operator <(const BigN &b){
if(len != b.len)return len < b.len;
int i = len - 1;
while((~i) && A[i] == b.A[i]) --i;
return A[i] < b.A[i];
}
void put(FILE *Fout){
int i = len - 1;
fprintf(Fout, "%d", A[i]);
while(i)
fprintf(Fout, "%04d", A[--i]);
}
};
#define maxlen (1005)
#define base (10000)
int len, A[maxlen];
BigN():len(1){A[0] = 0;}
BigN(const int x):len(1){A[0] = x;}
void operator *= (const int x){
int slid = 0, i;
for(i = 0;i < len;++i){
A[i] = A[i] * x + slid;
slid = A[i] / base;
A[i] %= base;
}
while(slid){
A[i] = slid;
slid = A[i] / base;
A[i++] %= base;
}
len = i;
}
void operator /= (const int x){
for(int i = len - 1;i;--i){
A[i-1] += A[i] % x * base;
A[i] /= x;
}
A[0] /= x;
while(len > 1 && !A[len - 1])--len;
}
bool operator <(const BigN &b){
if(len != b.len)return len < b.len;
int i = len - 1;
while((~i) && A[i] == b.A[i]) --i;
return A[i] < b.A[i];
}
void put(FILE *Fout){
int i = len - 1;
fprintf(Fout, "%d", A[i]);
while(i)
fprintf(Fout, "%04d", A[--i]);
}
};
相关文章推荐
- 拷贝构造与重载运算符
- Java基础 - 欧几里得法求最大公约数
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
- 第四次上机作业
- win快捷键大全
- [三进制倍增 || 可并堆] BZOJ 4003 [JLOI2015]城池攻占
- Linux内核学习总结
- POJ3422 Kaka's Matrix Travels
- golang协程资源占有率
- HDOJ(HDU) 2091 空心三角形
- HDOJ(HDU) 2091 空心三角形
- Java重载(OverLoad)的理解
- php file_put_contents() 读取数据不换行问题
- Java的对象是采用值传递还是引用传递?
- 发表在IBM Developworks上的文章,Spark Streaming 图片处理案例介绍
- 面试中的排序算法总结
- 排序问题-快速排序
- [乱搞 暴力 并查集] BZOJ 3563 DZY Loves Chinese
- poj 2777 Count Color(线段树区间更新+位运算)
- Codeforces Round #349 (Div. 2) - C