Can I get sme help, please.
here is a code:
here is a code:
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MaxDig = 1001;
struct bignum {
int dig[ MaxDig ];
int brDig;
bignum () {
memset ( dig, 0, sizeof ( dig ) );
brDig = 1;
}
bignum ( int A ) {
memset ( dig, 0, sizeof ( dig ) );
if ( A == 0 ) {
brDig = 1;
}
else {
brDig = 0;
while ( A ) {
dig[ brDig++ ] = A % 10;
A /= 10;
}
}
}
bignum ucitaj ( void ) {
bignum veliki;
int N;
scanf ( "%d", &N );
for ( int i = 0 ; i < N ; ++i ) {
scanf ( "%d", &dig[ i ] );
veliki.dig[ i ] = dig[ i ];
}
return veliki;
}
void IzbrisiNule ( void ) {
while ( brDig > 1 ) {
if ( dig[ brDig - 1 ] > 0 ) {
break;
}
else {
--brDig;
}
}
}
bignum operator+ ( const bignum& B ) {
bignum ret;
int carry = 0;
int length = max ( brDig, B.brDig );
for ( int i = 0 ; i < length ; ++i ) {
ret.dig[ i ] = ( dig[ i ] + B.dig[ i ] + carry ) % 10;
carry = ( dig[ i ] + B.dig[ i ] + carry ) / 10;
}
if ( carry > 0 ) {
ret.dig[ brDig++ ] = carry;
}
return ret;
}
bignum operator- ( const bignum& B ) {
bignum ret;
int carry = 0;
int length = max ( brDig, B.brDig );
for ( int i = 0 ; i < length ; ++i ) {
dig[ i ] -= carry;
if ( dig[ i ] < B.dig[ i ] ) {
dig[ i ] += 10;
ret.dig[ i ] = ( dig[ i ] - B.dig[ i ] );
carry = 1;
}
else {
ret.dig[ i ] = ( dig[ i ] - B.dig[ i ] );
carry = 0;
}
}
return ret;
}
bignum operator* ( const bignum& B ) {
bignum ret;
bignum tmp;
int carry = 0;
for ( int i = 0 ; i < brDig ; ++i ) {
tmp = 0;
carry = 0;
tmp.brDig = B.brDig + i;
for ( int j = 0 ; j < B.brDig ; ++j ) {
tmp.dig[ i + j ] = ( dig[ i ] * dig[ j ] + carry ) % 10;
carry = ( dig[ i ] * dig[ j ] + carry ) / 10;
}
if ( carry > 0 ) {
tmp.dig[ brDig++ ] = carry;
}
ret = ret + tmp;
}
return ret;
}
bignum operator/ ( int div ) {
bignum ret;
int carry = 0, k;
for ( int i = brDig - 1 ; i >= 0 ; --i ) {
carry *= 10;
k = ( carry + dig[ i ] ) % div;
ret.dig[ i ] = ( carry + dig[ i ] ) / div;
carry = k;
}
IzbrisiNule ();
return ret;
}
bool operator< ( const bignum& B ) {
if ( brDig < B.brDig ) {
return true;
}
if ( brDig > B.brDig ) {
return false;
}
for ( int i = brDig - 1 ; i >= 0 ; --i ) {
if ( dig[ i ] != B.dig[ i ] ) {
return dig[ i ] < B.dig[ i ];
}
}
}
bool operator== ( const bignum& B ) {
if ( brDig != B.brDig ) {
return false;
}
for ( int i = 0 ; i < brDig ; ++i ) {
if ( dig[ i ] != B.dig[ i ] ) {
return false;
}
}
return true;
}
bignum BinarySearch ( void ) {
bignum low = 1;
bignum high = ucitaj();
bignum broj = high;
bignum middle;
while ( low < high ) {
middle = ( high + low ) / 2;
return high;
if ( middle * middle < broj ) {
low = middle + 1;
}
else {
high = middle;
}
}
return low;
}
void ispisi ( void ) {
bignum ret = BinarySearch();
printf ( "%d\n", ret.brDig );
for ( int i = ret.brDig - 1 ; i >= 0 ; --i ) {
printf ( "%d\n", ret.dig[ i ] );
}
}
}BigNum;
int main() {
BigNum.ispisi();
return 0;
}