UVa 10494 - If We Were a Child Again
来源:互联网 发布:下载站源码 编辑:程序博客网 时间:2024/06/05 05:24
#include <iostream>#include <cstdio>#include <cstring>#include <string>using namespace std;#ifndef BIGN_H_INCLUDED#define BIGN_H_INCLUDED#define MAX_N 3000 //最大位数//大数struct bign { char s[MAX_N]; int len; bign() { memset(s, 0, sizeof(s)); len = 1; } bign(int num) { *this = num; } bign(const char *num) { *this = num; } bign operator = (const char *num) { len = strlen(num); for(int i=0; i<len && num[len-1-i]>='0' && num[len-1-i]<='9'; i++) { s[i] = num[len-1-i] - '0'; } while(len > 1 && s[len-1] == 0) len--; return *this; } bign operator = (int num) { char s[MAX_N]; sprintf(s, "%d", num); *this = s; return *this; } bign operator + (const bign &b) const { bign c; int m = len > b.len ? len : b.len; int i, g, sum; for(i=0, g=0; g || i< m; i++) { sum = g; if(i < len) sum += s[i]; if(i < b.len) sum += b.s[i]; c.s[i] = sum%10; g = sum / 10; } c.len = i; return c; } bign operator += (const bign &b) { *this = *this + b; return *this; } bign operator * (const bign &b) const { bign c; int i, j, g, sum; for(i=0; i<b.len; i++) { g = 0; for(j=0; g||j<len; j++) { sum = c.s[i+j] + g; if(j < len) sum += b.s[i]*s[j]; c.s[j+i] = sum % 10; if(c.s[j+i] > 0) c.len = i+j+1; g = sum / 10; } } return c; } bign operator *= (const bign &b) { *this = *this * b; return *this; } bign operator / (const int b) const { bign c; long long a=0; int i=0; char r[1000]; int j = 0; bool start = false; for(i=len-1; i>=0; i--) { a = a*10 + s[i]; if(!start && (a/b!=0)) start = true; if(start) { r[j++] = a/b; } a = a%b; } if(start) { c.len = j; for(i=j-1; i>=0; i--) { c.s[j-1-i] = r[i]; } return c; } else { return 0; } } bign operator /= (const int b) { *this = *this / b; return *this; } int operator % (const int b) { long long a=0; int i=0; for(i=len-1; i>=0; i--) { a = a*10 + s[i]; a = a%b; } return (int)a; } bool operator < (const bign &b) const { if(b.len != len) return len < b.len; int i; for(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 !(*this > b);} bool operator >= (const bign &b) const {return !(*this < b);} bool operator != (const bign &b) const {return (*this < b) || (*this > b);} bool operator == (const bign &b) const {return !(*this < b) && !(*this > b);}};ostream& operator << (ostream& outstream, const bign& b){ for(int i=b.len-1; i>=0; i--) { outstream << (int)b.s[i] << ""; } return outstream;}istream& operator >> (istream& instream, bign& b){ string s; instream >> s; b = s.c_str(); return instream;}//实数struct real { bign _b; //保证末尾不为0 unsigned int _dot; real(const bign b, const unsigned int dot) { _b = b; _dot = dot; }};ostream& operator << (ostream& outstream, const real& r){ int i = r._dot - r._b.len; int j; if(i >= 0) { outstream << "."; for(j=0; j<i; j++) { outstream << "0"; } outstream << r._b; } else { int l = r._b.len - 1; for(j=0; j>i; j--) { outstream << (int)r._b.s[l--]; } if(l >= 0) outstream << "."; while(l >= 0) { outstream << (int)r._b.s[l--]; } } return outstream;}#endif // BIGN_H_INCLUDEDchar buff[1000];#define MAX_INT ((1u<<(sizeof(int)*8-1))-1)int main(){ #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); #endif char op; int a; bign b; while(scanf("%s", buff) == 1) { while(scanf("%c", &op)) { if(op == '/' || op == '%') break; } scanf("%d", &a); b = buff; //cout << b << endl; if(op == '/') cout << b/a << endl; else cout << b%a << endl; } return 0;}