张育玮 发表于 2022-11-12 17:09:04

这道题怎么做

如图

gandixiwang 发表于 2022-11-12 22:08:37

本帖最后由 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 22:56:16

本帖最后由 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:11:27

本帖最后由 gandixiwang 于 2022-11-12 23:13 编辑

jhq999 发表于 2022-11-12 22:56
我理解的

懂了,这就和最大公因数差不多嘛

jhq999 发表于 2022-11-12 23:16:51

gandixiwang 发表于 2022-11-12 23:11
懂了,这就和最大公因数差不多嘛

{:5_108:}

傻眼貓咪 发表于 2022-11-13 09:45:55

gandixiwang 发表于 2022-11-12 22:08
运行实例

这样子应该符合你的题目要求

假设 x = 15, y = 4 呢?(答案是 1,你的代码是 3)
页: [1]
查看完整版本: 这道题怎么做