128位二进制字符串转换为十进制字符串

128位二进制字符串转换为十进制字符串,第1张

如果这个二进制数比较大的话, 大到只能用数组储存这个二进制数,

当然如果大到转化成10进制int存不下的情况那另当别论

#include<stdio.h>

#include<string.h>

int main()

{

char a[33]

int i, num = 0

scanf("%s", a)

for(i=strlen(a)-1i>=0i--)

{

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 sgetline(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=0k<s.size()k++){ //开始从k=0位读取字符s[k]

if(s[k]=='1'){ //等于'0'时,2的k次方为0

for(int i=ti<ki++){ //求2的k次方,每次循环乘2,共乘k-t次 t为保留的上次a[i]累计

for(int j=0j<904j++) //每一位都乘2

a[j]=2*a[j]

t=k

for(j=0j<904j++) //检查从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=0j<904j++){ //b数组为求和数组,初值为0

b[j]=b[j]+a[j]//将此次k位上的2的k次方数的大小与b求和

if(b[j]>=10){ b[j]=b[j]-10b[j+1]=b[j+1]+1}//大于10进1,下一位加1

}

}

}

int w

for(int i=903i>=0i--) //w为统计此3000位二进制数转化为十进制后的位数

if(b[i]!=0){ w=ibreak} //从最高位开始,遇到非0数结束

for(i=wi>=0i--) //输出结果,注意是从高位开始输出

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=0i<s->leni++)

s->value[i]*=2

s->value[0]+=BitValue

for (i=0i<s->leni++){

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-1i>=0i--)

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=0buf[i]i++)

AddBit(&BigInt,buf[i]=='1'?1:0)

OutputBigInt(&BigInt)

}

return 0

}

随着电脑的发展,字符长度会变长的。以前电脑更差劲的时候数据库名称长度也就几个字符。

128字符对于现在的要求足够用了,也就是记录条数不会超过128个字符能够表示的记录个数。

有两种。

1.转换(int,字段名)

例如:选择convert(int,'3')

选择cast('3'作为int)

一般来说,没有必要将字符串转换为数字类型,如果你需要比较两个字段是相等的,但为字符串类型字段,类型,用“=”来比较这两个值是相等的,SQLSERVER将自动将字符串转换为一个数字,然后比较。

扩展资料:

注意事项:

这两个函数都执行强制转换,但是语法不同。据说有一些不同的转换,但我更习惯于使用转换函数,它更像一个函数的语法一方面,可以指定的格式转换,将时间和价值转换为一个字符串。

对于数据类型的确切值,转换后的字符串是我们存储的值。如:

声明@iintset@i=123456789print'test:'+转换(varchar(20),@i)

输出是:test:123456789

对于具有近似值的数据类型,情况就不那么简单了。

声明@ifloatset@i=123456789print'test:'+转换(varchar(20),@i):test:1.23457e+008


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9884440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存