当然如果大到转化成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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)