Cod sursa(job #1056776)

Utilizator UAIC_SARBU_ALEXANDRUSarbu Alexandru Gabriel UAIC_SARBU_ALEXANDRU Data 14 decembrie 2013 13:36:21
Problema Progresie Scor 0
Compilator cpp Status done
Runda ONIS 2014, Runda 1 Marime 1.2 kb
#include<fstream>
using namespace std;
ifstream fin("progresie.in");
ofstream fout("progresie.out");
unsigned long long s;
long r;
int i,j,t,n,v[1000],v1[1000],vs[1000],k;
bool ok;
int main()
{
	fin>>t;
	for (i=1;i<=t;i++)
	{
		j=1;
		fin>>n>>r;
		s=(n-1)*r;
		while (s!=0)
		{
			v[j]=s%10;
			s=s/10;
			j++;
		}
		ok=1;
		v[0]=j-1;
		j=1;
		for (k = j; k <= v[0];k++)
			v1[k] = v[k];
		while (ok)
		{
			if (v[j] + 1 <= 9)
			{
				v1[j]++;
				ok=0;
			}
			else
			{
				v1[j]=0;
				v1[j + 1]++;
				j++;
			}
		}
		v1[0]=j;
		for (j = 1; j <= v[0];j++)
		{
			vs[j] = vs[j]+(v[j] * v1[j])%10;
			if (v[j] * v1[j] > 9)
				vs[j + 1] = (v[j] * v1[j])/10;
		}
		vs[0] = v[0];
		if (vs[vs[0]+1]!=0)
			vs[0]++;
		if (v[0] < v1[0])
		{
			vs[v[0] + 1] = vs[v[0] + 1] + v1[v1[0]];
			vs[0] ++;
		}
		if (vs[vs[0]]>9)
		{
			vs[vs[0]] = vs[vs[0]]%10;
			vs[vs[0] + 1] = vs[vs[0]]/10;
			vs[0]++;
		}
		j=1;
		ok=1;
		while (ok)
		{
			vs[j] = (vs[j]+1)%10;
			if (vs[j]+1<=9)
				ok=0;
			else
				j++;
		}
		for (j = vs[0]; j >=1;j--)
		{
			fout << vs[j];
			vs[j]=0;
		}
		vs[0]=0;
		fout<<endl;
	}
	fin.close();
	fout.close();
	return 0;
}