整除光棍

这篇博客探讨了如何找到一个不以5结尾的奇数对应的光棍数(只包含1的数)及其位数,并解决因数值过大而带来的存储问题。通过模拟除法过程,将大数分解为数组,逐位进行运算,直至找到能被光棍数整除的另一个数。举例展示了具体步骤,帮助理解这一算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
一、题意:就是给你一个不以5结尾的奇数 找到对应的光棍数的位数, 和其被光棍数整除的另一个数。
二、难点:该数光棍数和另一个数特别大,难以储存。
三、解决办法呢:
对于另一个数:可以把他每一位储存在数组里;
对于光棍数的查找:可以通过模拟除法过程:至于这个过程是什么,请看下面↓;
四、寻找光棍数的过程:
1、首先找到第一个不小于该数的光棍数,
2、对其取余,如果余数不为零,下一步操作
3、在该光棍数后面再加1,接着余数进行操作,
4、重复2,3;

如果还不明白,就看一下图片(我一贯讲究NPNBB,翻译: 没有图片别BB, 所以图片来之不易,凑合看吧,看不懂可以尽情的喷)

在这里插入图片描述
————————————————————————————————————
在这里插入图片描述
————————————————————————————————————————————
因为上一步余数为6, 6!= 0 所以 继续在后面补1, 然后在除, 余数为5
在这里插入图片描述
————————————————————————————————————————
上一步余数为5 , 5!= 0 , 继续补1, 。。。。。。
在这里插入图片描述
—————————————————————————————————————————————————
上一步余数为2 , 继续补1, 然后再除 ,余数为 0 , 结束 15873 就是另一个数, 光棍数有6个1.

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x, l = 1;//x表示输入的奇数, l表示光棍树
    int n = 1;//统计位数;

    int num2[3005];//储存n, 另一个数
    int i = 1;//表示第几位

    scanf("%d", &x);

    while(l< x)//找到不小于该数的第一个光棍数
    {
        l = l*10+1;
        n++;
    }

    int mod;

    while(1)
    {
        mod = l%x;
        if(mod == 0)
        {
            num2[i] = l/x;
            break;
        }
        else //位数不够,加一位
        {
            num2[i++] = l/x;
            n++;
            l = mod*10+1;
        }
    }

    int j;
    for(j = 1;j<=i;j++)
    {
        printf("%d", num2[j]);
    }

    printf(" %d", n);

    return 0;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值