字符串数组问题
题目:将二进制转换为十进制我的代码如下,但是运行一直错误,不知道错在哪里
顺便问一下strlen()是获取字符串长度是否会读取到‘\0’这个字符
#include <stdio.h>
#include <math.h>
int main()
{
char a;
int i,k,s=0;
gets(a);
k=strlen(a);
for(i=0;i<=k;i++)
{
s+=a*pow(2,i);
}
printf("%d",s);
return 0;
} 循环换成这个,自行理解
for (i = 0; i < k; i++)
{
s += (a-'0') * pow(2, i);
}
strlen是不加\0的长度 本帖最后由 鬼魅王子 于 2019-10-27 23:08 编辑
苏紫方璇 发表于 2019-10-27 22:51
循环换成这个,自行理解
for (i = 0; i < k; i++)
{
emmm...
修改1.i<k是因为 strlen 是从1开始,所以K=3,假设为101;实际只需要循环3次而<=会循环4次.
2.a 假设为101 所以K=3,结果为a 也就是对应输入的最后一个数.
3.a-'0' 是因为我定义的是char 所以 对应的ascii码 所以要减去'0'的ascii码.
谢谢大佬解答...
苏紫方璇 发表于 2019-10-27 22:52
strlen是不加\0的长度
顺便问一下:编译出现incompatible implicit declaration of built-in function 'strlen'
这个是什么问题,百度了没结果 鬼魅王子 发表于 2019-10-27 23:08
顺便问一下:编译出现incompatible implicit declaration of built-in function 'strlen'
这个是什么问 ...
应该是缺个头文件 string.h 本帖最后由 老伙计 于 2019-10-27 23:30 编辑
#include <stdio.h>
#include <string.h>
int main(void)
{
char a ;
int k , m ;
unsigned long long i , s ;
fgets(a , 100 , stdin) ;
m = strlen(a) - 1 ;
a = '\0' ;
for(s = 0 , i = 1 , k = m ; k ; i *= 2 , k --) if(a == '1') s += i ;
printf("%I64u\n" , s) ;
} 苏紫方璇 发表于 2019-10-27 23:15
应该是缺个头文件 string.h
头文件是有的 鬼魅王子 发表于 2019-10-27 23:29
头文件是有的
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
char a;
int i, k, s = 0;
gets_s(a);
k = strlen(a);
for (i = 0;i <= k;i++)
{
s += int(a * pow(2, i));//这里要不要强制转换自定数据类型
}
printf("%d", s);
return 0;
} 逍遥枷锁 发表于 2019-10-29 10:19
#include
#include
#include
强制转换会出错,这句要注意的是字符对应的ascii码
页:
[1]
2