69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
int zh(char str[])
{
int sum = 0;/*定义总值*/
int j = 1;/*交换数值*/
int pot = strlen(str) - 1;/*把str数组值先减一*/
for (; pot >= 0; pot--) /*循环 pot值 每次减一*/
{
sum += (str[pot] - '0')*j;
j*=2;/*每次j都乘2*/
}
return sum;
}
int main()
{
int result;
char a[32];
printf("please input 1001 number ");
scanf_s("%s",a, 32);
result= zh(a);
printf("thit is number %d\n",result);
return 0;
}
参考一下吧int zh(const char * restrict str)
{
int sum = 0;
while (*str != 0)
{
char c = *str++;
if (c < '0' || c > '1')
{
break;
}
sum <<= 1;
sum |= c - '0';
}
return sum;
}
实在不明白从末尾扫描的优势,如果中间夹杂着不合法字符怎么办?比如字符串 "13579" 转换数字:13579 => sum = sum * 10 + ('1' - '0');
^
13579 => sum = sum * 10 + ('3' - '0');
^
13579 => sum = sum * 10 + ('5' - '0');
^
13579 => sum = sum * 10 + ('7' - '0');
^
13579 => sum = sum * 10 + ('9' - '0');
^
这种情况的话,从做到右扫描,遇到第一个不合法字符即可直接终止计算。