项目场景:
二进制转化十进制的相关问题
问题描述
1:int与long的精度问题
#include<stdio.h>
#include<math.h>
void huan(int n)
{
int a=0,c=1; //a表示余数,b表示结果,c表示扩大倍数
long long b=0;
while(n != 0)
{
a=n%2; //存余数
n/=2; //被除数除2
b+=a*c; //余数扩大指定倍数加到结果中
c*=10; //扩大倍数
}
printf("%lld",b);
}
int main()
{
huan(2022);//注意别超出范围
return 0;
}
原因分析:
很明显,精度问题
解决方案:
修改a,b类型即可
#include<stdio.h>
#include<math.h>
void huan(int n)
{
long long a=0,c=1; //a表示余数,b表示结果,c表示扩大倍数
long long b=0;
while(n != 0)
{
a=n%2; //存余数
n/=2; //被除数除2
b+=a*c; //余数扩大指定倍数加到结果中
c*=10; //扩大倍数
}
printf("%lld",b);
}
int main()
{
huan(2022);//注意别超出范围
return 0;
}