这道题怎么做
如图 本帖最后由 gandixiwang 于 2022-11-12 23:10 编辑#include <stdio.h>
#include <math.h>
#define MAX pow(10,18)
//递归函数
int count(long long int x,long long int y)
{
//如果y等于1,退出程序并返回x的值
if(y==1)
{
return x;
}
//如果y不等于1,x和y各减半并进入函数
else if(y!=1)
{
count(x/2,y/2);
}
}
int main(void)
{
long long int x;
long long int y;
printf("请输入x和y的值:");
scanf("%lld %lld",&x,&y);
//如果x和y大于10的18次方,提示并重新输入
while(x>MAX || y>MAX)
{
printf("您输入的值大于10的18次方,请重新输入:");
scanf("%lld %lld",&x,&y);
}
//调用并输出x的值
printf("xi的值为:%d",count(x,y));
}
运行实例
请输入x和y的值:10 4
xi的值为:2
这样子应该符合你的题目要求 本帖最后由 jhq999 于 2022-11-12 23:08 编辑
我理解的
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned long long x=12,y=10;
while(x!=y)
{
if(x>y)x>>=1;//10^18能省点时间就省点
else y>>=1;
}
printf("%llu",x);
return 0;
}
本帖最后由 gandixiwang 于 2022-11-12 23:13 编辑
jhq999 发表于 2022-11-12 22:56
我理解的
懂了,这就和最大公因数差不多嘛 gandixiwang 发表于 2022-11-12 23:11
懂了,这就和最大公因数差不多嘛
{:5_108:} gandixiwang 发表于 2022-11-12 22:08
运行实例
这样子应该符合你的题目要求
假设 x = 15, y = 4 呢?(答案是 1,你的代码是 3)
页:
[1]