用数组来实现2进制转换为10进制的方法:
参考代码:
#include
#include
viod main()
{
int i,n,k=1,a[50]; //50个二进制位
printf("enter n:");
scanf("%d",&n);
if(n<=0) exit(0); //小于等于0的直接退出
a[0]=n%2;
do
{
n=n/2;
i=n%2;
a[k++]=i;
}while(n!=0);
for(i=49;a[i]==0;i--) ; //找到二进制开始的地方,也就是最后一个余数在数组中的位置
for(;i>-1;i--)
printf("%d",a[i]);
}
问题不是很清楚,是一个'1' 和‘0’ 的char[] 作为input,然后一个int 作为结果的话,可以这样写:
比如进来时“10100010001”这样一个用char[] 表示的string的话
int convert(char * arg)
{
int result = 0;
//先找长度
int length = strlen(arg);
//用pos来找正确的bit position, 因为 index 0 对应的是bit pos, 1 对应 pos -1, etc
int pos = length - 1;
for (int i = 0; i
{
result + = (int)(arg[i] - '0')<<(pos - i);
}
return result;
}
如果想程序跑的快点可以加一个 #pragma omp parallel for (+:result) firstprivate(i) 在for循环前面一行, 当然如果题主不需要就当没看到这个啦, xD
希望解答了你的问题