读入一个以1开头的二进制序列,请将其转换成十进制数输出。(用循环解决,不能使用数组和函数)
输入格式:
若干行,每行代表一组数据,是一串二进制数的1-0序列,最多不超过30位。所有数据只由1、0和回车组成,不包含任何其它空白字符。
输出格式:
依次输出每组数据转换成的十进制数,每个输出结果单独占一行。
#include
#include
int main()
{
unsigned long long n,i=0,sum=0,net,j=0;
char arr[30];
while(scanf("%s",arr)!=EOF)
{
sum=0;
i=0;
n=arr[j]-'0';
while(n>0)
{
n=arr[j]-'0';
net=n%10;
sum+=net*pow(2,i);
n/=10;
i++;
j++;
}
printf("%lld\n",sum);
}
return 0;
}
while的循环条件错了,不会改
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
unsigned long long n,sum=0,net,j=0;
char arr[30];
while(scanf("%s",arr)!=EOF)
{
sum=0;
int len = strlen(arr);
for(int i = len - 1; i >= 0;i--){
int num = arr[i] - '0';
sum += (num * pow(2,len - i - 1));
}
printf("%lld\n",sum);
}
return 0;
}
修改如下,供参考:
#include<stdio.h>
#include<math.h>
int main()
{
unsigned long long n,i=0,sum=0,net,j=0;
char arr[30];
while(scanf("%s",arr)!=EOF)
{
sum=0;
i=0;
//n=arr[j]-'0';
while(arr[i]) //while(n>0)
{
sum = sum * 2 + arr[i] - '0';
//n=arr[j]-'0';
//net=n%10;
//sum = net*pow(2,i);
//n/=10;
i++;
//j++;
}
printf("%lld\n",sum);
}
return 0;
}