将二进制转换成十进制时数字长了就会出错不知道为什么

行行都行 2020-09-11 10:40:13
这是题目:






大家帮我看看为什么数字长了,像题中给的那个例子输入进去就输出0?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int x,i=0,n,a[16]={0},s=0;
scanf("%d",&x);
while(x>0)
{a[i]=x%10;
x=x/10;
i++;
}
n=i;
for(i=0;i<n;i++)
{s=s+a[i]*(pow(2,i));

}
printf("%d",s);
return 0;
}
...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-09-12
  • 打赏
  • 举报
回复
用字符串的格式接收输入,或者用long long接收,因为16位长度超过了int范围 即 long long x; scanf(“%ld”, &x); 或者 char x[17]; scanf(“%s”, x); 另外,计算s的时候,a要倒过来遍历,因为x%10每次取x的最后一位存入a[i],所以要改成for(i=n-1; i>=0; i--) s+=a[i]*pow(2, i)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧