Pagini recente » Cod sursa (job #1054391) | Cod sursa (job #3177590) | Cod sursa (job #3282335) | Cod sursa (job #1610752) | Cod sursa (job #1055225)
#include <fstream>
#define NMAX 32
using namespace std;
ifstream f("progresie.in");
ofstream g("progresie.out");
class Number
{
int m_nr[NMAX];
public:
Number ()
{
for (int i = 0; i < NMAX; ++ i)
m_nr[i] = 0;
}
Number (unsigned long x)
{
Number();
int pos = 0;
while (x)
{
pos ++;
m_nr[pos] = x%10;
x /= 10;
}
m_nr[0] = pos;
}
Number (const Number& n)
{
Number();
for (int i = 0; i <= n.m_nr[0]; ++ i)
{
m_nr[i] = n.m_nr[i];
}
}
Number operator<< (int);
Number& operator= (const Number&);
friend Number operator+ (const Number&, int);
friend Number operator+ (const Number&, const Number&);
friend Number operator* (const Number&, int);
friend Number operator* (const Number&, const Number&);
void PrintNo();
};
Number Number::operator<<(int pos)
{
if (pos <= 0)
return *this;
int n = m_nr[0];
for (int i = n + pos; i > 0; -- i)
{
if (i > pos)
m_nr[i] = m_nr[i - pos];
else
m_nr[i] = 0;
}
m_nr[0] = m_nr[0] + pos;
return *this;
}
Number operator+ (const Number& n, int x)
{
Number r;
int t = 0, i;
for (i = 1; i <= n.m_nr[0]; ++ i)
{
r.m_nr[i] = (n.m_nr[i] + (x != 0 ? x%10 : 0) + t)%10;
t = (n.m_nr[i] + (x != 0 ? x%10 : 0) + t)/10;
if (x != 0)
{
x /= 10;
}
}
if (t != 0)
{
r.m_nr[i] = t;
r.m_nr[0] = n.m_nr[0] + 1;
}
else
{
r.m_nr[0] = n.m_nr[0];
}
return r;
}
Number operator+ (const Number& n, const Number& p)
{
Number r;
int t = 0, noDigits = max(n.m_nr[0], p.m_nr[0]);
for (int i = 1; i <= noDigits; ++ i)
{
r.m_nr[i] = (n.m_nr[i] + p.m_nr[i] + t)%10;
t = (n.m_nr[i] + p.m_nr[i] + t)/10;
}
if (t != 0)
{
r.m_nr[noDigits + 1] = t;
r.m_nr[0] = noDigits + 1;
}
else
{
r.m_nr[0] = noDigits;
}
return r;
}
Number operator* (const Number& n, int x)
{
Number r;
int t = 0, i;
for (i = 1; i <= n.m_nr[0]; ++ i)
{
r.m_nr[i] = (n.m_nr[i]*x + t)%10;
t = (n.m_nr[i]*x + t)/10;
}
while (t != 0)
{
r.m_nr[i] = t%10;
t /= 10;
i ++;
}
r.m_nr[0] = i - 1;
return r;
}
Number operator* (const Number& n, const Number& p)
{
Number r;
for (int i = 1; i <= p.m_nr[0]; ++ i)
{
r = r + ((n * (p.m_nr[i]) ) << (i - 1) );
}
return r;
}
Number& Number::operator= (const Number& n)
{
for (int i = 0; i <= n.m_nr[0]; ++ i)
m_nr[i] = n.m_nr[i];
return *this;
}
void Number::PrintNo()
{
for (int i = m_nr[0]; i > 0; -- i)
{
g << m_nr[i];
}
}
int main()
{
int t;
long long n, r;
f >> t;
while(t --)
{
f >> n >> r;
Number k( (n - 1)*r );
Number sol( k*(k + 1) + 1 );
sol.PrintNo();
g << "\n";
}
return 0;
}