我决定使用字符串来实现添加,因为我的数字可能很大。我面临的问题是如何将字符串中的十进制数转换为二进制数。如果lol
是添加的结果,我正在尝试使用以下内容将其转换为二进制形式:
unsigned long long function_arg = atoi( lol.c_str() );
随着位数的增长,例如n> 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
:(
答案 0 :(得分:0)
你使用字符串代表很长的数字,对吧?不符合标准数字类型的数字?结果没有什么不同。考虑制作一组以数字表示为字符串的函数。这是他们被允许处理数字的唯一方式。
因此,编写十进制到二进制函数来直接获取字符串,并一次转换一个字符串。
答案 1 :(得分:0)
你能建议我做什么?
别。无法将较大的值转换为太小的类型。您的API中根本不需要这种方法,或者至少不应该这样。
BTW您设计的方法签名没有意义。参数应该是'字符串',而结果应该是'long long'。但是不要提供它。