uva10106--BigNumber

来源:互联网 发布:淘宝app降价提醒 编辑:程序博客网 时间:2024/06/05 15:44

自己感觉真没什么问题,但是为什么就是提交不过呢。。

晕,原来不是以0结束,纠结了我好久。。

今天下午确实比较烦了。。

//#define LOCAL#include <stdio.h>#include <string.h>#include <iostream>#include <math.h>using namespace std;#define MAXN 80 + 10#define MAX 255 + 10const int maxn = 10000;// 大数类的定义 struct bign{int len, s[maxn];bign(){memset(s, 0, sizeof(s));len = 1;}// 重载操作符‘=’用于赋值字符数组bign operator = (const char* num){len = strlen(num);for(int i = 0; i < len; i++){s[i] = num[len - i - 1] - '0';}return *this;}// 重载操作符‘=’用于赋值数字 bign operator = (int num){char s[maxn];sprintf(s, "%d", num);*this = s;return *this;}// 参数为数字类型的构造函数bign(int num){*this = num;} // 参数为字符数组类型的构造函数bign(const char* num){*this = num;} // 将字符数组转化成字符串string str() const{string res = "";int i;for(i = 0; i < len; i++){res = (char)(s[i] + '0') + res;}if(s[i - 1] == 0)res = "";if(res == "") res = "0";return res;} // 重载操作符 +bign operator + (const bign& b) const{bign c;c.len = 0;for(int i = 0, g = 0; g || i < max(len, b.len); 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){*this = *this + b;return *this;} // 重载操作符 -// 重载操作符 -=// 重载操作符 *bign operator * (const bign& b) const{bign c;c.len = 0;int i, j;int g; int temp;for(i = 0; i < len; i++){c.len = i;for(j = 0; j < b.len; j++){c.s[c.len] += s[i]  * b.s[j] ; // 按位乘 g = 0;c.len++;temp = c.len - 1;while(c.s[temp] >= 10) {g = c.s[temp] / 10; // 保存进位 c.s[temp] = c.s[temp] % 10; // 保存余数 temp++;// 将标志向后推移 c.s[temp] += g; // 将余数保存在下一位 }}}c.len = temp + 1;return c;}// 重载操作符 *=bign operator *= (const bign& b){*this = *this * b;return *this;} // 重载操作符 /// 重载操作符 /= // 重载比较操作符 <bool operator < (const bign& b) const{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 > (const bign& b) const{return b < *this;}// 重载比较操作符 <=bool operator <= (const bign& b) const{return !(b < *this);}// 重载比较操作符 >=bool operator >= (const bign& b) const{return !(*this < b);}// 重载比较操作符 !=bool operator != (const bign& b) const{return b < *this || *this < b;}// 重载比较操作符 ==bool operator == (const bign& b) const{return !(b < *this) && !(*this < b);}};// 重载操作符 >>istream& operator >> (istream &in, bign& x){string s;in >> s;x = s.c_str();return in; } // 重载操作符 <<ostream& operator << (ostream &out, const bign& x){out << x.str();return out;} int main(){#ifdef LOCALfreopen("input.txt", "r", stdin);//freopen("output.txt", "w", stdout);#endifbign num = 0;bign result = 1;bign temp = 0;bool flag = false;while(cin >> num && num.s[num.len- 1] != 0){result *= num;if(flag){flag = false;cout << result << endl;result = 1;}else flag = true;}return 0;}


原创粉丝点击