A / B problem

来源:互联网 发布:js改变input边框颜色 编辑:程序博客网 时间:2024/06/03 06:00

A / B problem

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 24   Accepted Submission(s) : 7

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A / B.

Input

The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.

Output

For each test case, you should output the result of A/B.

Sample Input

12 1

Sample Output

2


#include<iostream>

#include<sstream>
#include<cstring>
#include<algorithm>
#define maxn 3600
using namespace std;








struct bign
{
int len,s[maxn];




bign()
{
memset(s,0,sizeof(s));
len=1;
}




bign(int num) {*this=num;}




bign(const char* num){*this=num;}




bign operator = (int num)
{
char s[maxn];
sprintf(s,"%d",num);
*this=s;
return *this;
}




bign operator = (const char* num)
{
len=strlen(num);
int i;
for(i=0;i<len;i++) s[i]=num[len-i-1]-'0';
return *this;
}




string str() const
{
string res = "";
int i;
for(i=0;i<len;i++) res=(char)(s[i]+'0')+res;
if(res=="") res="0";
return res;
}




void clean() {while(len>1&&!s[len-1]) len--;}




bign operator + (const bign& b) const
{
bign c;  c.len=0;
int i,g;
int max=len>b.len?len:b.len;
for(i=0,g=0;g||i<max;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 * (int num)
{
bign c; c.len=len+25;
int i,j=0;
for(i=0;i<c.len;i++)
{
c.s[i]=(s[i]*num+j)%10;
j=(s[i]*num+j)/10;
}
c.clean();
return c;
}




bign operator * (const bign& b)
{
bign c; c.len=len+b.len;
int i,j;
for(i=0;i<len;i++) for(j=0;j<b.len;j++) c.s[i+j]+=s[i]*b.s[j];
for(i=0;i<c.len-1;i++)
{
c.s[i+1]+=c.s[i]/10;
c.s[i]%=10;
}
c.clean();
return c;
}




bign operator - (const bign& b)
{
bign c; c.len=0;
int i,g=0;
for(i=0;i<len;i++)
{
int x=s[i]-g;
if(i<b.len) x-=b.s[i];
if(x>=0) g=0;
else {g=1; x+=10;}
c.s[c.len++]=x;
}
c.clean();
return c;
}




bool operator < (const bign& b) const
{
if(len!=b.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) {return !(*this>b);}
bool operator >= (const bign& b) {return !(*this<b);}
bool operator == (const bign& b) {return !(b<*this)&&!(*this<b);}




bign operator += (const bign& b) {*this=*this+b; return *this;}




bign operator << (int& n)
{
if(*this==0||n==0) return *this;
bign t=*this;
int i=t.len-1;
t.len+=n;
int *p=t.s;
for(;i>=0;i--) p[i+n]=p[i], p[i]=0;
for(i=0;i<n;i++) p[i]=0;
return t;
}




bign operator / (bign b)
{
bign ans=0,big=*this,add,chu;
bign one=1;
int t;
while(big>=b)
{
t=big.len-b.len;
chu=b<<t;
if(chu>big) chu=b<<(--t);
add=one<<t;
while(chu<=big)
{
big=big-chu;
ans+=add;
}
}
return ans;
}
};








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 ()
{ int n;
  bign a,b;
  cin>>n;
  while(n--)
  {
      cin>>a>>b;
      cout<<a/b<<endl;
  }
    return 0;
}
原创粉丝点击