C语言求公因数

#include <stdio.h>
int main(void)
{
	int a,d;
	int num,index=0;
	int name[100];
	int line=0;
	int flag=0; 
	printf("输入一个正整数:");
	scanf("%d" ,&a);
	printf("公因数如下:\n");
	for (d=2;(d*d<=a);d++)
	    if (a%d==0)//判断能分解的条件 
	    {
	    	if ((d*d)!=a)
	        {
	        	name[index]=d;
	    	    name[index+1]=a/d;
	    	    index+=2;
			}
	    	else 
	    	{
	    		name[index]=a/d;
	    		index++; 
			 } 
		}
	for (num=0;num<index;num++) 
	{
		printf("%5d",name[num]);
	    line++;
	    flag++;
	    
	    if (line%2==0)//两个一行输出 
	        printf("\n");
	}    
		    	 
	printf("\n公因数共有%d个",flag);	        
	return 0;	       
}

求公因数,从2开始。两个一行输出。对于公因数相同的也能处理

输入一个正整数:36
公因数如下:
    2   18
    3   12
    4    9
    6
公因数共有7个
--------------------------------
Process exited after 2.425 seconds with return value 0
请按任意键继续. . .

C语言中,如果需要计算分数的相加并进行通分,通常会涉及到两个步骤:首先,将每个分数转换为相同的分母,然后进行加法运算。 假设我们有两个分数,例如 `num1/denom1` 和 `num2/denom2`,它们都是简化的分数(即分子和分母没有公因数)。为了通分,你需要找到这两个分母的最大公约数(GCD),记作`g`。 以下是通分的基本步骤: 1. **最大公约数** (GCD): 使用欧几里得算法(Euclidean algorithm)或辗转相除法来找到`denom1`和`denom2`的最大公约数。 2. **确定公共分母**: 将最大公约数`g`乘以另一个分母中较小的那个,得到新的公共分母`new_denom = g * min(denom1, denom2)`。 3. **转换成新分母**: 对于每个分数,将分子也扩大到新的分母大小: - 对于第一个分数 `num1`,新分子变为 `new_num1 = num1 * new_denom / denom1` - 对于第二个分数 `num2`,同理,新分子变为 `new_num2 = num2 * new_denom / denom2` 4. **相加**: 最后,将两个新的分子相加,得到结果分数的新分子 `sum_num = new_num1 + new_num2`,分母保持不变,因为它们已经是一样的。 下面是一个简单的示例程序,展示了如何实现这个过程: ```c #include <stdio.h> #include <math.h> // 计算最大公约数 int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } // 主函数,处理分数相加 void addFractions(int* numerator1, int* denominator1, int* numerator2, int* denominator2) { int commonDenominator = gcd(*denominator1, *denominator2); *numerator1 *= commonDenominator / *denominator1; *numerator2 *= commonDenominator / *denominator2; // 直接相加,无需再做进一步操作,因为分母已一致 *numerator1 += *numerator2; printf("通分后的分数是: %.1f/%d\n", (double)*numerator1, commonDenominator); } int main() { int num1 = 3; // 分子1 int denom1 = 4; // 分母1 int num2 = 2; // 分子2 int denom2 = 5; // 分母2 addFractions(&num1, &denom1, &num2, &denom2); return 0; } ``` 运行上面的代码,它将输出通分后的分数。请注意,实际应用中,你可能需要用户输入分数,并处理浮点数来显示小数部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值