m0_73674542 2022-10-15 11:47 采纳率: 67.7%
浏览 25
已结题

想运行超过19位的数

读入一个以1开头的二进制序列,请将其转换成十进制数输出。(用循环解决,不能使用数组和函数)
输入格式:
若干行,每行代表一组数据,是一串二进制数的1-0序列,最多不超过30位。所有数据只由1、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(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的循环条件错了,不会改

  • 写回答

2条回答 默认 最新

  • lzl2040 新星创作者: 人工智能技术领域 2022-10-15 11:53
    关注
    #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;
    } 
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 10月15日