Я решил реализовать добавление, используя строки, так как мои цифры могут быть огромными. Проблема, с которой я сталкиваюсь, заключается в том, как преобразовать из десятичных чисел в строки в двоичный. Если lol
является результатом того, что я пытаюсь преобразовать его в двоичной форме с использованием:Преобразование строки с использованием длинной арифметики
unsigned long long function_arg = atoi(lol.c_str());
Поскольку число цифр растет, как, например, п> 14, это не удается, так что даже long long
является слишком короткий. Что вы можете мне посоветовать? Вот на самом деле код моей программы (работа с десятичной системой):
#include <iostream>
#include <string>
#include <bitset>
#include <conio.h>
using namespace std;
string add (string &s1, string &s2) {
int carry=0,sum,i;
string min=s1,
max=s2,
result = "";
if (s1.length() > s2.length()) {
max = s1;
min = s2;
} else {
max = s2;
min = s1;
}
for (i = min.length()-1; i>=0; i--) {
sum = min[i] + max[i + max.length() - min.length()] + carry - 2*'0';
carry = sum/10;
sum %=10;
result = (char)(sum + '0') + result;
}
i = max.length() - min.length()-1;
while (i>=0) {
sum = max[i] + carry - '0';
carry = sum/10;
sum%=10;
result = (char)(sum + '0') + result;
i--;
}
if (carry!=0) {
result = (char)(carry + '0') + result;
}
return result;
}
string Dex_To_bin(unsigned long long number){
string result;
unsigned long long bitmask = 1ULL << 63;
do
result.push_back(static_cast<bool>(number & bitmask));
while (bitmask >>= 1);
return result;
}
int main() {
string a,b;
cin >> a >> b;
add(a,b);
cout << add(a,b) << endl;
cout << endl;
cout << endl;
string lol=add(a,b);
unsigned long long funtion_arg = atoi(lol.c_str());
cout << Dex_To_bin(funtion_arg) << bitset<64>(funtion_arg) << endl;
cin.get();
cin.ignore();
getch();
return 0;
}
Функция add
отлично работает, проблема с Dec_to_Bin
:(
Пожалуйста, правильно скорректируйте свой код. Плохо отформатированный код показывает лень, и люди здесь менее склонны помогать ленивым кодировщикам. –
И почему бы вам не использовать библиотеку для этого - например [GMP] (http://gmplib.org/)? Это было бы намного быстрее и надежнее. – Tometzky
Если вы, конечно, не делаете это в образовательных целях ... :-) – nickie