C语言求long的最大范围和最小范围

本文通过C语言代码展示了如何计算long类型的最大值和最小值,并解释了使用位移运算符来确定这些值的方法。

今天在做POJ的题是遇到了大数问题,就想编程支持long的最大值范围。

	long max = 1;
	printf("sizeof(long ) = %d \n",sizeof(long)); //long类型数据占的字节数bytes
	printf("sizeof(int ) = %d \n",sizeof(int));   
	printf("sizeof(long long ) = %d \n",sizeof(long long));
	printf("Max of long is %ld \n",~(max<<(sizeof(long)*8-1)));//long 的最大值
	printf("Min of long is %ld \n",(max<<(sizeof(long)*8-1))); //long 的最小值

### C语言实现最大公约数最小公倍数 #### 使用欧几里得算法最大公约数 (GCD) 一种高效的方法来计算两个整数的最大公约数是使用欧几里得算法。该算法基于这样一个事实:两个正整数 \(a\) \(b\) 的最大公约数等于较小的那个数与两数之差之间的最大公约数。 ```c #include <stdio.h> int gcd(int a, int b) { while(b != 0) { int temp = b; b = a % b; a = temp; } return a; } ``` 这段代码实现了上述逻辑,通过不断取模直到余数为零为止[^1]。 #### 计算最小公倍数 (LCM) 一旦获得了 GCD 后,可以很容易地得到 LCM。因为对于任意一对正整数 \(a\) \(b\), 它们的乘积等于它们各自质因子分解后的所有不同质因数幂次相加的结果;而这个结果又恰好等于这两个数各自的 GCD 与其对应的商的乘积: \[ \text{LCM}(a,b)=|ab|/\text{GCD}(a,b)\] 因此,在已知 `gcd` 函数的情况下,可以通过下面的方式快速获得 lcm: ```c long long lcm(long long a, long long b){ return abs((a / gcd(a, b)) * b); } ``` 这里需要注意的是为了防止溢出,先做除法再乘以另一个操作数[^3]。 #### 综合示例程序 将以上两种功能结合起来编写完整的 C 程序如下所示: ```c #include <stdio.h> #include <stdlib.h> // For using the function 'abs' // Function to compute GCD of two numbers. int gcd(int a, int b); // Function to calculate LCM based on previously defined GCD method. long long lcm(long long a, long long b); int main(){ int num1, num2; printf("Enter two integers: "); scanf("%d %d", &num1, &num2); printf("The Greatest Common Divisor is : %d\n", gcd(num1,num2)); printf("The Least Common Multiple is : %lld\n",lcm(abs(num1), abs(num2))); return 0; } /* Implementation of Euclidean algorithm */ int gcd(int a, int b){ if (b == 0) return a; else return gcd(b, a % b); } /* Calculate LCM after getting GCD value from above function */ long long lcm(long long a, long long b){ return ((a / gcd(a, b)) * b); } ``` 此段代码首先让用户输入两个整数,接着调用了之前定义好的函数去获取并打印出相应的 GCD 及 LCM 值[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值