问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

算法Java如何实现把不定长的字符串扩展为128位二进制数?

发布网友 发布时间:2024-04-28 22:43

我来回答

1个回答

热心网友 时间:2024-06-18 22:53

如果这个二进制数比较大的话, 大到只能用数组储存这个二进制数,
当然如果大到转化成10进制int存不下的情况那另当别论
#include<stdio.h>
#include<string.h>
int main()
{
char a[33];
int i, num = 0;
scanf("%s", a);
for(i=strlen(a)-1; i>=0; i--)
{
num*=2;
num+=a[i]-'0';
}
printf("%d\n", num);
return 0;
}
不好意思,没看清楚题目,大数的我也没编出来。
我在网上找到了一个C++的,希望对你有帮助。
//==========================================
//将64个3000位的二进制转化成十进制,性能:120秒内
//------------------------------------------
#include<iostream>
#include<fstream>
#include<sstream>
#include<algorithm>
#include<time.h>
using namespace std;
//------------------------------------------
int main(){
clock_t start=clock(); //统计时间
ifstream in("abc.txt");
for(string s;getline(in,s);){ //读取二进制数
int b[904]={0},t=0; //三千位的二进制数都为1时最大,转换后约为1.2e+903,所以取数组904足够
int a[904]={0}; //数组的每一位放置十进制的一位数,从a[0]到a[903]依次为个位、十位、百位...
a[0]=1; //数组初值全为零,第一位为2的0次方,等于1,所以a[0]附值为1
reverse(s.begin(),s.end()); //倒置字符串s
for(int k=0;k<s.size();k++){ //开始从k=0位读取字符s[k]
if(s[k]=='1'){ //等于'0'时,2的k次方为0
for(int i=t;i<k;i++){ //求2的k次方,每次循环乘2,共乘k-t次 t为保留的上次a[i]累计
for(int j=0;j<904;j++) //每一位都乘2
a[j]=2*a[j];
t=k;
for(j=0;j<904;j++) //检查从a[0]到a[903]每位是不是都是个位数
if(a[j]>=10){ //超过10就要进位
a[j]=a[j]-10; //j位大于10进1
a[j+1]=a[j+1]+1; //下位即j+1位要加1
}
}
for(int j=0;j<904;j++){ //b数组为求和数组,初值为0
b[j]=b[j]+a[j]; //将此次k位上的2的k次方数的大小与b求和
if(b[j]>=10){ b[j]=b[j]-10; b[j+1]=b[j+1]+1;}//大于10进1,下一位加1
}
}
}
int w;
for(int i=903;i>=0;i--) //w为统计此3000位二进制数转化为十进制后的位数
if(b[i]!=0){ w=i;break;} //从最高位开始,遇到非0数结束
for(i=w;i>=0;i--) //输出结果,注意是从高位开始输出
cout<<b[i];
cout<<endl;
cout<<"十进制位数为:"<<w+1<<endl<<endl; //输出转化后的十进制数位数
}
cout<<"耗用时间为:"<<(clock()-start)/CLK_TCK<<endl; //输出耗用时间,64个3000位的测试时间为12秒
}//=======================================
还有一个这个。
#include <stdio.h>
#include <string.h>
#define MAX_LEN 10000
typedef struct{
int len;
char value[MAX_LEN];
} TBigInt, *pBigInt;
void AddBit(pBigInt s,char BitValue){ //加一位, 0或者1。
int i;
for (i=0;i<s->len;i++)
s->value[i]*=2;
s->value[0]+=BitValue;
for (i=0;i<s->len;i++){
s->value[i+1]+=s->value[i]/10;
s->value[i]%=10;
}
if (s->value[s->len]) s->len++;
}
void OutputBigInt(pBigInt s){ //输出大整数类型
int i;
if (s->len==0){
puts("0");
} else {
for (i=s->len-1;i>=0;i--)
putchar(s->value[i]+'0');
putchar('\n');
}
}
int main(){
static char buf[1000000];
static TBigInt BigInt;
while (scanf("%s",buf)!=EOF){
memset(&BigInt,0,sizeof BigInt);
int i;
for (i=0;buf[i];i++)
AddBit(&BigInt,buf[i]=='1'?1:0);
OutputBigInt(&BigInt);
}
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
蚂蚁泡酒适合哪些人喝 蚂蚁酒的功效与禁忌蚂蚁酒的功效与作用 热血无赖卡怎么办 了解这两方面内容 益生菌孕妇 孕妇能喝益生菌吗 羽毛球双打底线是内线还是外线 为什么泰国两位尊者有不死之身 秦始皇活了多少岁?当了几年皇帝? DELL电脑D630.PP18L2手机。才用了4个多月。多少钱我可以买呢,麻烦谁说... dellpp18l现在买多少钱 ...我要从广州岗顶到员村,知道乘3路到珠江新城,然后再坐5路到员村,求... 吉林省图书馆预约入口没有了 我宁愿你比我先死 qq群课堂学生进去怎么不开麦呢? 在一个长12cm宽5cm高8cm的长方体中挖去一个最大的半圆椎剩下的体积... ...是40厘米如图王老师在这块铁皮上正好剪下一个半圆来做教具 在一个长36米宽18米的长方形上减一个最大的半圆这个圆的周长是多少米... 长方体少一个面是什么 ...该U形池可以看作是一个长方体去掉一个半圆柱形成的,中间可供滑行部... ...该池可以看作是一个长方体去掉一个&quot;半圆柱”而成 中间可供滑行部分的... ...该U型池可以看作是一个长方体去掉一个“半圆柱” ...可以看作是一个长方体去掉一个“半圆柱”而成,中间可供 一个长方体中间挖去一个半圆住半圆柱的直径知道长方体的长宽高都知道... 工地AI全流程监管,实现工程精细化管理 长兴在安吉的什么方向 怎样选择适宜的机械收获油菜时期? 牙周炎红肿了出血怎么办 excel如何快速输入以“千元”为单位的数值 试管促拍中合房了没射进去会有影响嘛? ...他说如果分开,他说以后不让我走这条路,什么意思 怎么从番禺坐车到天河区员村西街5号大院 ...将该数字字符转换成相应的二进制串,八进制串和十六进制串。_百度... 在建筑空间组合上,高层公共建筑类型虽多,但常用的两种为( )。_百度... 佛山市诺恒企业形象策划有限公司怎么样? ...出汗现象,检查血管造影说是心肌缺血。怎么治 350元之内推荐一个最好的羽毛球拍,最好是攻守兼备的,杆中等硬 小狗不知道是不是中毒,请各位想想具体办法,不胜感激! 黄玉和黑曜石的区别 ...一下黑曜石在强光下是黄色的是真的吗? 黄色和蓝色有什么区别... 苹果手机怎样关闭云上贵州iCloud 苹果云上贵州怎么取消 云上贵州扣费怎么取消? 云上贵州如何取消自动续费? 不可水洗的衣可以水洗吗不可水洗的衣服能不能水洗 怎么抢淘宝上的百亿补贴商品 新大主宰飞速版bt手游安卓游戏如何下载 主业旅行社,副业什么好? 电视主页停止工作是怎么回事? 大浪淘沙是什么意思啊? 康明斯k19发动机每小时消耗柴油多少升