首页 > 其他分享 >C语言求输入两个数最大公约数和正负号变化的分数之和

C语言求输入两个数最大公约数和正负号变化的分数之和

时间:2022-10-22 23:02:14浏览次数:73  
标签:int sum2 sum1 C语言 最大公约数 正负号 min1 余数

一.求两个数最大公约数

问题描述

输入两个数,输出这两个数的最大公约数

解题思路

辗转相除法;它的具体做法是:用较大数除较小数,再用除数去除出现的余数(第一余数),再用第一余数去除出现的余数(第二余数),如此反复,直到最后余数是0为止。那么最后的除数就是这两个数的最大公约数。比如有两个数24和18,24/18=1·····6;再用18/6=3·····0;这时余数已经是0了,那么最大公约数就是最后一个除数6;

画个图理解一下:

C语言求输入两个数最大公约数和正负号变化的分数之和_最大公约数


代码:

#include<stdio.h>
int main()
{
int a=0,b=0;
scanf("%d %d",&a,&b);
int max1,min1;
if(a>b)
{
max1=a;
min1=b;

}
else
{
max1=b;
min1=a;
}
int yu;
while(max1%min1)//只要余数不为0,就为真就一直循环
{

yu=max1%min1;
max1=min1;
min1=yu;
}
printf("最大公约数是:%d\n",min1);//只有当余数为0时,才会执行这一步
}

 运行结果是:

C语言求输入两个数最大公约数和正负号变化的分数之和_#include_02

 二.求正负号变化的分数之和

问题描述

C语言求输入两个数最大公约数和正负号变化的分数之和_辗转相除法_03


解题思路

法一

1.符号一直在有规律变化,那么我们干脆分开来算,把所有的加法和减法分开算出来,最后相减就可以了。
代码:

#include<stdio.h>
int main()
{

double sum1=0.0;
double a=0.0;
for(int i=1;i<=100;)
{
a=1.0/i;//这里一定要是1.0而不能是1,如果是1那就默认是整数型了,a的值就一直会是0
sum1=sum1+a;
i=i+2;
}
double b=0;
double sum2=0;
for (int j=2;j<=100;)
{
b=1.0/j;
sum2=sum2+b;
j=j+2;
}
printf("分母是奇数的和是%lf 分母是偶数的和是%lf\n",sum1,sum2);
printf("最终的结果是:%lf",sum1-sum2);
}

运行结果是:

C语言求输入两个数最大公约数和正负号变化的分数之和_辗转相除法_04

法二

我们发现加减法的变换是有规律的,那么我们可以定义一个flag值,让其随之变化1,-1即可。
代码:

#include<stdio.h>
int main()
{

double a,b,sum;
int flag=1;
for (int i=1;i<=100;i++)
{

a=1.0/i;
b=flag*a;
sum=sum+b;
flag=-flag;//加减号是轮流来的,所以每循环一次换一次就可以了
}
printf("最后结果是:%lf",sum);
}

运行结果是:

C语言求输入两个数最大公约数和正负号变化的分数之和_辗转相除法_05

两种方法结果相同






标签:int,sum2,sum1,C语言,最大公约数,正负号,min1,余数
From: https://blog.51cto.com/u_15832450/5786182

相关文章

  • 【C语言】运行与调试、查看信息、优秀的代码。
    ......
  • 【C语言】函数的概述、函数的好处、库函数、语法原型。
    ......
  • 【C语言】自定义函数
    ......
  • 【C语言进阶】二.指针(上)
    前言:指针的主题,我们在【C语言有这个就够了】学习中已经接触过了,我们知道了指针的概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间2.指针的大小是固定的4/8个字......
  • c语言——0与空格占位
    1.对于整形0占位只要在d前面加0X就ok了(X包括原来的数位)就像空格占位前占位直接在d前面加X,后站位加-X如2.对于浮点数说实在没什么好占位的......
  • C语言_1
    video2scanf;strcpy;strlen;strcat等函数是不安全的,在vscode内会自动提供一个更安全的函数如scanf_s,但是这样就扼杀了程序的兼容性,所以我们一般不采取这样方式来解决,而是在第一......
  • c语言—数据存储进阶篇—笔记
    数据存储还是比较麻烦的,因为要数数和做加减运算(原码、反码、补码),但因为牵扯到内存硬件,所以比较容易理解。1.数据类型char//字符数据类型short//短整型int//整形long//长......
  • C语言内嵌汇编
    实现val3=val1+val2函数#include<stdio.h>voidmyAdd(intval1,intval2){intval3=0;printf("val1=%d,val2=%d,val3=%d\n",val1,val2,val3);......
  • 选择排序与冒泡排序(c语言+Java语言)
    选择排序O(n2)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素......
  • c语言基础理解(原创)
        家中小女初上大学开学计算机课程,学习C语言时遇到困难,为帮助她尽快入门,特写了这篇基本概念理解,希望帮她快速认识清楚C语言的本质。发到博客园上,也帮助同样的C语言......