Piszę własną klasę do obsługi b. dużych liczb i mam funkcję:
vlong vlong::operator +( vlong& v ) {
vlong ret;
size_t s = ( size < v.size ? size : v.size );
ret.size = ( size > v.size ? size : v.size );
int diff = 0;
size_t i = 0;
for( ; i < s; i++ ) {
ret.tab[i] = ( tab[i] + v.tab[i] + diff ) % 10;
diff = ret.tab[i] / 10;
}
if( size > v.size )
for( ; i < ret.size; i++ ) {
ret.tab[i] = tab[i] + diff % 10;
diff = tab[i] + diff / 10;
}
else
for( ; i < ret.size; i++ ) {
ret.tab[i] = v.tab[i] + diff % 10;
diff = tab[i] + diff / 10;
}
if( diff > 0 ) {
ret.tab[i] = diff;
ret.size++;
}
return ret;
}
i w kodzie:
vlong v = 1;
vlong b = 1234567 ;
vlong n = v + b;
cout << n;
i na wyjściu wywala mi:
22-312-2-10
PS
Wiem, że jest biblioteka vlong, ale to jest moje przygotowanie na olimpiadę, a dochodząc samemu do tego jak to działa najlepiej jest mi to zapamiętać.