题目描述
有好几万个二进制数,最长不超过64位,请将其都转换成十进制数
输入描述
输入有多行!!每行包含一个长度不超过64位二进制数,最后一行输入-1表示输入结束
输出描述
对于每行二进制数,输出转换后的十进制数,每个数占一行
输入样例
100101101010100
101010000100101111
-1
输出样例
19284
172335
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
double power(double x, int n); // 原函数声明
int main () {
__int64 value;
char c[64];
while (cin >> c){
if(c[0] == '-'){
break;
}
int len = strlen(c); // 获取输入的二进制的长度
value = 0;
for (int i = len - 1; i >= 0; i--){
if (c[i] == '1'){
value += static_cast<__int64>(power(2, len - i - 1)); // static_cast<__int64>(参数)将double型数据转换成__int64型数据
}
}
cout << value << endl;
}
}
double power (double x, int n){ // 返回给定数字的乘幂,返回类型为double型
double val = 1.0;
while (n--){
val *= x;
}
return val;
}
strlen函数的实现
#include <iostream>
using namespace std;
size_t strlen(const char *s){
size_t len = 0;
while(*s++){
len++;
}
return len;
}
int main(void){
char *p = "vvcat";
cout << "字符串的长度为:" << strlen(p) << endl;
}