想法

C语言函数是重要程序设计模块,充分的C函数“武器库”能给程序设计带来很大便利。这篇博文会收集一些我自己写的一些函数,供大家参考。如有bug或者有更好的算法,欢迎各位大佬批评指正!

代码展示

计算一个int整型的位数

//Calculate Digits of a Number 计算一个int整型的位数并返回给主调函数

int cal_digits(int);

int cal_digits(int copyNum)
{
int NoD = 1;
int flag = 1;
while (flag == 1)
{
copyNum = copyNum / 10;
if (copyNum == 0) flag = 0;
else NoD++;
}
return NoD;
}

判断一个int整型是否是素数

//Judge Pirme 判断一个int整型是否是素数 如果是,返回1 如果不是,返回0

int judge_prim(int);

int judge_prim(int copyNum)
{
int flag = 1;
for (int i = 2; i * i <= copyNum; i++)
{
if (copyNum % i == 0)
{
flag = 0;
break;
}
}
return flag;
}

求一个int整型的逆数

//reverse int 求一个int整型的逆数

int reverse_int(int);

int reverse_int(int copyNum)
{
int reverseNum = 0, digit;
while (copyNum != 0)
{
digit = copyNum % 10;
reverseNum = reverseNum * 10 + digit;
copyNum /= 10;
}
return reverseNum;
}

将一个不超过10位的二进制数转换为十进制数

//BIN to DEC 将一个不超过10位的二进制数转换为十进制数

#include <math.h>

int cal_digits(int copyNum);
int BIN_to_DEC(int bin);

int BIN_to_DEC(int bin)
{
int NoD, digit, dec = 0, mid; //mid: 转换中间量
NoD = cal_digits(bin);
for (int i = 1; i <= NoD; i++)
{
digit = bin % 2;
mid = pow(2, i - 1);
dec = dec + digit * mid;
bin /= 10;
}
return dec;
}

int cal_digits(int copyNum)
{
int NoD = 1;
int flag = 1;
while (flag == 1)
{
copyNum = copyNum / 10;
if (copyNum == 0) flag = 0;
else NoD++;
}
return NoD;
}

用辗转相除法求两个数的最大公约数,然后求两个数的最大公倍数

//cal_GCD 用辗转相除法求两个数的最大公约数
//cal_LCM 用辗转相除法求两个数的最大公约数后求两个数的最大公倍数
//出于函数调用上的便捷性,cal_LCM()并没有直接调用cal_GCD()

int cal_GCD(int m, int n);
int cal_LCM(int m, int n);

int cal_GCD(int m, int n)
{
int gcd, remainder = 1;
while (remainder)
{
remainder = m % n;
m = n;
n = remainder;
}
return m;
}

int cal_LCM(int m, int n)
{
int c_m, c_n, lcm, gcd, remainder = 1;
c_m = m;
c_n = n;
while (remainder)
{
remainder = c_m % c_n;
c_m = c_n;
c_n = remainder;
}
gcd = c_m;
lcm = m / gcd * n;
return lcm;
}