大整数除法(取模和取余)
2014-03-07 21:45
344 查看
//两个大整数相除和取余。除法用直接的减法实现,效率较低。
保存于此,后面对这种方法进行改进。应该是uva 10494 这题。
保存于此,后面对这种方法进行改进。应该是uva 10494 这题。
//两个大整数相除和取余。除法用直接的减法实现,效率较低。 #include<cstdio> #include<iostream> #include<cstring> #include<string> #define MAXN 200 using namespace std; struct bign { int len,s[MAXN]; bign(){ memset(s,0,sizeof(s)); len=1;} bign(const bign& c) { *this=c; } bign(const char* num){ *this=num; } void clean() {//去除前导0 while(len>1 && !s[len-1]) len--; } string str() const { string res=""; for(int i=0;i<len;++i) res=(char)(s[i]+'0')+res; return res; } bign operator=(const bign &b) { len=b.len; for(int i=0;i<MAXN;++i) s[i]=b.s[i]; } bign operator=(const char *num) { len=strlen(num); for(int i=0;i<len;++i) s[i]=num[len-1-i]-'0'; return *this; } bign operator+(const bign &b) const { bign c; c.len=0; for(int i=0,g=0;i<max(len,b.len)||g;++i) { int x=g; if(i<len) x+=s[i]; if(i<b.len) x+=b.s[i]; c.s[c.len++]=x%10; g=x/10; } return c; } bign operator-(const bign& b) const { bign c; c.len=0; for(int i=0,g=0;i<len;++i) { int x=s[i]-g; if(i<b.len) x=x-b.s[i]; if(x<0) { x=x+10; g=1; } else g=0; c.s[c.len++]=x; }//for c.clean();//去除前导0 return c; } bign operator/(bign& b) { bign c=*this; bign n; while(c>=b) { c=c-b; n=n+bign("1"); } return n; } bign operator%(bign& b) { bign c=*this; bign n; while(c>=b) { c=c-b; n=n+bign("1"); } return c; } bool operator<(bign& b) {//该函数首先调用clean函数去除前导0,所以可能改变bign变量 clean(); b.clean(); if(len!=b.len) return len<b.len; for(int i=len-1;i>=0;--i) if(s[i]!=b.s[i]) return s[i]<b.s[i]; return false; } bool operator>=(bign &b) { return !(*this<b); } }; istream& operator>>(istream& in, bign& x) { string s; cin>>s; x=s.c_str(); return in; } ostream& operator<<(ostream& out, const bign& x) { out<<x.str(); return out; } int main() { bign a,b,s,m; char c; while(cin>>a>>c>>b) { if(c=='/') cout<<a/b<<endl; else cout<<a%b<<endl; } return 0; }
相关文章推荐
- 大整数除法2(取模和取余) 有改进,但依旧过不了 UVa 10494
- 位运算之美——用+,-和位运算实现整数除法和取模(一)
- 位运算之美——用+,-和位运算实现整数除法和取模(一)
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 位运算之美--用 +、- 和位运算实现正整数除法和取模(2)
- 大数运算(5)——大数除法(取模、取余)
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 探讨关于 整数除法 和 取余 的映射规律
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 位运算之美——用+,-和位运算实现正整数除法和取模(二)
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 位运算之美——用+,-和位运算实现正整数除法和取模(二)
- 大数运算(5)——大数除法(取模、取余)
- 位运算之美——用+,-和位运算实现正整数除法和取模(二)
- 整数的除法和取模
- 位运算之美——用+,-和位运算实现正整数除法和取模(一)
- 位运算之美——用+,-和位运算实现正整数除法和取模(二)
- HDU - 5832 A water problem(大整数取模)