Pagini recente » Cod sursa (job #1551985) | Cod sursa (job #1665755) | Cod sursa (job #384206) | Cod sursa (job #3194870) | Cod sursa (job #915525)
Cod sursa(job #915525)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
#define Nmax 128
char s[Nmax];
typedef short int BigNumber[Nmax];
BigNumber A, B, C;
void citire(){
ifstream f("sarpe.in");
f.getline( s, Nmax );
for ( int i = strlen( s ) - 1; i >= 0; i-- )
A[ ++A[0] ] = s[i] - 48;
f.close();
}
void afis(BigNumber a){
ofstream g("sarpe.out");
for(int i = a[0]; i; i--)
g << a[i];
g << endl;
g.close();
}
void inmul(int x, BigNumber a){
int T = 0;
for ( int i = 1; i <= a[0]; i++ )
a[i] = a[i] * x + T,
T = a[i] / 10,
a[i] %= 10;
while ( T )
a[ ++a[0] ] = T % 10,
T /= 10;
}
void scadere(BigNumber a, BigNumber b){
int T = 0;
for ( int i = 1; i <= a[0]; i++ )
a[i] += ( T = ( a[i] -= b[i] + T ) < 0 ) ? 10 : 0;
while ( !a[ a[0] ] )
a[0]--;
}
void inmultire(BigNumber a, BigNumber b, BigNumber c){
int T = 0;
c[0] = a[0] + b[0] - 1;
for ( int i = 1; i <= a[0]; i++ )
for ( int j = 1; j <= b[0]; j++ )
c[ i + j - 1 ] += a[i] * b[j];
for ( int i = 1; i <= c[0]; i++ )
T = ( c[i] += T ) / 10,
c[i] %= 10;
if (T)
c[ ++c[0] ] = T;
}
void aduna(int x, BigNumber a){
int T = 0;
for ( int i = 1; i <= a[0]; i++, x /= 10 )
a[i] += T + x,
T = a[i] / 10,
a[i] %= 10;
while( T )
a[ ++a[0] ] = T % 10,
T /= 10;
}
void copiaza(BigNumber a, BigNumber b){
a[0] = b[0];
for ( int i = 0; i <= a[0]; i++ )
a[i] = b[i];
}
void rezolva(){
copiaza(B, A);
inmultire(A, A, C);
inmul(2, B);
scadere(C, B);
aduna(4, C);
}
int main(){
citire();
rezolva();
afis(C);
return 0;
}