代码应该将二进制数转换为十进制数,但事实并非如此。任何人都可以检查我可能出错的地方。
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
char s[40];
int base;
int index,n,p,sum=0; /* n is the number of digits in the converted value */
printf("enter the number and base: ");
scanf("%s %d",s,&base);
for(n=strlen(s)-1;n>=0;n--)
{
p=strlen(s);
for(index=strlen(s)-(p-1); index<=p; index++)
{
sum += s[index] * pow(base,n);
}
}
printf("decimal no. is %d",sum);
printf("\n");
}
输出:
enter the number and base:1011
2
十进制没有。是1487
答案 0 :(得分:2)
您的代码存在一些问题:
'0'
或'1'
,而不是数字的值pow(base,n)
中,n
应该替换为从后面开始的数字位置。以下是修改代码的方法:
// Power starts at the length-1
p=strlen(s)-1;
for(index=0; index < strlen(s); index++, p-- /* <<< Power counts down */)
{
sum += (s[index]-'0') * pow(base,p);
// ^^^-- Note the minus '0' above:
// That's what gives you a digit's value
}
答案 1 :(得分:1)
p = 1; sum = 0;
for(n=strlen(s)-1;n>=0;n--)
{
sum += (s[n] - '0') * p;
p = p << 1;
}
我推荐上面的代码,而不是你的双周期。
答案 2 :(得分:0)
我的回答是:
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(int argc, char *argv[]){
char s[40];
int base;
int index,n,p,sum=0;/*n is the number of digits in the converted value */
printf("enter the number and base: ");
scanf("%s %d",s,&base);
p = strlen(s);
index = 0;
for(n = 40 - p - 1; n >= 0; n--)
sum += (s[n] - '0') * pow(base, index++);
printf("decimal no. is %d",sum);
printf("\n");
return 0;
}