c - 我没有从下面的代码中得到我期望的结果
问题描述
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int sizze(int n) //gives size of binary number 0f decimal number n.
{
int count=0;
while(n>1)
{
n=n/2;
count++;
}
count =count +1;
return count;
};
int bin(int n) //gives binary number.
{
int l=0;
int y[sizze(n)];
int t=sizze(n);
for(int i=0; i<t; i++)
{
y[i]=n%2;
n=n/2;
}
for(int i=t-1; i>=0; i--)
{
l=l+y[i]*pow(10,i);
}
return l;
}
int main()
{
printf("%d",bin(5));
return 0;
}
上面的代码是打印给定数字的二进制数,但是有一些错误。
我期待它打印 101,但它正在打印 100。有一些错误,l=l+y[i]*pow(10,i);
但我不明白它有什么问题。
谁能帮我找出错误。
解决方案
通常,使用浮点数而仅使用整数进行计算并不是一个好主意,因为浮点数计算可能包含错误。
(有关更多信息,请参阅语言不可知论 - 浮点数学是否损坏? - 堆栈内存溢出)
在这种情况下,您可以更改加法的计算顺序而不更改它们的结果,因此该部分
for(int i=t-1; i>=0; i--)
{
l=l+y[i]*pow(10,i);
}
可以写成
for(int i=0,delta=1; i<t; i++)
{
l=l+y[i]*delta;
delta=delta*10;
}
推荐阅读
- amazon-web-services - AWS 上的重定向,当使用 ALB + Cognito + ECS 时
- python - wait_for 'reaction_add' 检查不起作用
- c++ - 我想创建一个 C++ 程序来将随机数生成到文件中
- google-cloud-functions - 为什么我在这个谷歌云功能上的响应类型模糊?
- mysql - 尝试删除行时 MySQL 错误代码 1093
- ruby-on-rails - 为使用 FactoryBot 构建的对象添加相互关联
- python - 如何跟踪失败状态?
- c# - c# - 创建 csv 文件并将其上传到 ADLS
- javascript - 节点 GET 请求挂起,无法完成请求,页面继续加载
- javascript - React - 运算符'<'不能应用于类型'void'和'number'