超过32位的2进制数转换成10进制数输出

wbs89 2008-03-12 09:46:51
比如一个二进制数01010010000111110111110110110011001011111110011111100000001
则输出184924582623264513
注:二进制数不超过64位
课本上的习题,找不到答案
本人系新手,望赐教、、、
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wbs89 2008-03-14
  • 打赏
  • 举报
回复
多谢
taodm 2008-03-13
  • 打赏
  • 举报
回复
用long long int/int64/__int64类型即可。现在所有主流编译器都提供了64位长整型的。
wukexin 2008-03-13
  • 打赏
  • 举报
回复
/*
比如一个二进制数01010010000111110111110110110011001011111110011111100000001
则输出184924582623264513
注:二进制数不超过64位
课本上的习题,找不到答案
本人系新手,望赐教、、、
*/
#include <iostream>
#include <string>
#include <cmath>
#include <boost/lexical_cast.hpp>
#include <boost/dynamic_bitset.hpp>
#include <boost/static_assert.hpp>
using namespace std;
//
unsigned long long pow64(unsigned base,unsigned exp){
unsigned long long result=1;
for(unsigned i=1;i<=exp;i++){
result*=base;
}
return result;
}
//
unsigned long long sToN(string s){
boost::dynamic_bitset<> bs(s);
unsigned long long result=0;
for(int i=0;i<bs.size();i++){
if( bs.test(i) ) result+=pow64(2,i);
}
return result;
}
//
int main(int argc, char* argv[]){
try{
//cout<<"请输入一个二进制数:";
//string s;
//cin>>s;
//cout<<sToN(s)<<"\n";
string temp("01010010000111110111110110110011001011111110011111100000001");
cout<<"184924582623264513\n"<<sToN(temp)<<"\n";
//BOOST_STATIC_ASSERT( sToN(temp) == 184924582623264513);
}
catch(exception& e)
{
cout << e.what() << "\n";
return 1;
}
return 0;
}

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧