Cod sursa(job #1056772)

Utilizator Lucian-GeorgeFMI Popa Lucian George Lucian-George Data 14 decembrie 2013 13:36:07
Problema Progresie Scor 0
Compilator cpp Status done
Runda ONIS 2014, Runda 1 Marime 1.05 kb
#include<iostream>
#include<fstream>
using namespace std;

ofstream g("progresie.out");
void prod(int v[], int &nr, int v2[], int n)
{
	int i,j,c,r,a[10000],poz,k,nra=nr+n,na=n;
	for (i=1; i<=nr; i++) a[i]=0;
	for (i=1; i<=n; i++)
	{
		for (j=1; j<=nr; j++)
			a[j+i-1]=a[j+i-1]+v[j]*v2[i];
		r=0;
		for (k=1; k<=nra; k++)
		{
			a[k]=a[k]+r;
			r=a[k]/10;
			a[k]=a[k]%10;
		}
		while (a[nra]>9)
		{
			r=a[nra]/10;
			a[nra]=a[nra]%10;
			++nra;
			a[nra]=r;
		}
	}
	poz=1;
	a[poz]=a[poz]+1;
	while (a[poz]>9 && poz<nra)
	{
		a[poz]=0;
		++poz;
		a[poz]=a[poz]+1;
	}
	while (a[nra]==0) nra--;
	for (i=nra; i>=1; i--) g<<a[i];
	g<<"\n";
}

int main()
{
	int n,i,j,t,v[100000],v2[10000],nv,nv2;
	unsigned long long r,q;
	ifstream f("progresie.in");
	f>>t;
	for (i=1; i<=t; i++)
	{
		f>>n>>r;
		q=(n-1)*r;
		unsigned long long q2=q+1;
		nv2=nv=0;
		while (q>0)
		{
			++nv2;
			v2[nv2]=q%10;
			q=q/10;
		}
		while (q2>0)
		{
			++nv;
			v[nv]=q2%10;
			q2=q2/10;
		}
		prod(v,nv,v2,nv2);
	}
	return 0;
}