Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Длинная арифметика с++

Никита Пистуненко Ученик (100), на голосовании 1 год назад
На вход вашей программе даны 2 числа a и b, вам необходимо вывести результат их побитового ИЛИ. 0 ≤ a, b ≤ 10^200; Прошу помощи, 2 дня изучения темы длинной арифметики не дали плодов(
Дополнен 1 год назад
(код который дает правильные результаты но не на все ответы...)

#include
#include

using namespace std;

int main() {
const int base = 1000 * 1000 * 1000;
string sa;
cin >> sa;
vector a;
for (int i = (int)sa.length(); i > 0; i -= 9)
if (i < 9)
a.push_back(atoi(sa.substr(0, i).c_str()));
else
a.push_back(atoi(sa.substr(i - 9, 9).c_str()));
string sb;
cin >> sb;
vector b;
for (int i = (int)sb.length(); i > 0; i -= 9)
if (i < 9)
b.push_back(atoi(sb.substr(0, i).c_str()));
else
b.push_back(atoi(sb.substr(i - 9, 9).c_str()));

int carry = 0;
for (size_t i = 0; i < max(a.size(), b.size()) || carry; ++i) {
if (i == a.size())
a.push_back(0);
a[i] = a[i] | (carry + (i < b.size() ? b[i] : 0));
carry = a[i] >= base;
if (carry) a[i] -= base;
}
printf("%d", a.empty() ? 0 : a.back());
for (int i = (int)a.size() - 2; i >= 0; --i)
printf("%09d", a[i]);
}
Дополнен 1 год назад
P.S. почему то библиотеки стерлись (iostream и vector)
Голосование за лучший ответ
Батаев Дмитрий Просветленный (22267) 1 год назад
string a, b, c;

cout << "Введите число a= "; cin >> a; if (a.size()>200) { a.resize(200); }
cout << "Введите число b= "; cin >> b; if (b.size()>200) { b.resize(200); }

if (b.size()== 0) b= "10"; if (a.size()== 0) a= "01";

string::iterator ia,ib,ic,i; ia= a.end(); ib=b.end();
size_t ibEnd, iaEnd;
ibEnd= b.length(); iaEnd= a.length();

if ( iaEnd <= ibEnd ) { i= a.begin()-1; c=b; }
else { i= b.begin()-1; c=a; }

ic= c.end();

cout << endl << "a= " << a << endl << "b= " << b << endl << "c= " << c << endl;

do
{
if ( (*ia== '1') || (*ib== '1') ) { *ic='1'; }
else *ic='0';
ic--; ib--; ia--;
}while (ib!=i && ia!=i);

cout << endl << "a= " << a << endl << "b= " << b << endl << "c= " << c << endl;
Никита ПистуненкоУченик (100) 1 год назад
я не знаю что сказать, нам страшно....
я не понимаю что не так.
Батаев Дмитрий Просветленный (22267) Никита Пистуненко, ввод битовый = 1 или 0 я имел в виду. А тут ещё перевод 10-го в двоичный. Сам уж как-нибудь
Батаев ДмитрийПросветленный (22267) 1 год назад
кстати в двочном виде всё работает
Похожие вопросы