注册 登录
编程论坛 C语言论坛

二进制转十进制

qazxsw321 发布于 2019-12-11 19:35, 1769 次点击
输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。
建议:用字符数组存储大整数

输入样例
1001001100101100000001011010010


输出样例
1234567890
#include <stdio.h>
#include<string.h>
#include<math.h>
int main()
{
    int i,m,j;
    long long x=0;
    char a[101];
    gets(a);
    m=strlen(a);
    for(i=0;i<m;i++)
    {
        j=m-1-i;
        if(a[i]==49)
        x+=pow(2,j);
        
    }
    printf("%lld\n",x);

    return 0;
}
试了好几次,答案都是对的,但是提交后却不能通过
2 回复
#2
forever742019-12-11 22:17
很简单,因为long long不够长。
#3
rjsp2019-12-12 09:44
且不超过100位数字
unsigned long long 一般而言才64bits,那你需要两个unsigned long long才行
例如
#include <stdio.h>

int main( void )
{
    char bin[102];
    scanf( "%s", bin );

    unsigned long long hi=0, lo=0; // base 1000000000000000000
    for( const char* p=bin; *p; ++p )
    {
        lo = lo*2 + (*p-'0');
        hi = hi*2 + lo/1000000000000000000;
        lo %= 1000000000000000000;
    }

    if( hi == 0 )
        printf( "%llu\n", lo );
    else
        printf( "%llu%018llu\n", hi, lo );
}

1