首页 > 其他分享 >L1-046 整除光棍(模拟除法)

L1-046 整除光棍(模拟除法)

时间:2024-07-06 14:27:49浏览次数:23  
标签:count 10 31 除以 bachelor 取整 L1 046 整除

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入格式:

输入在一行中给出一个不以5结尾的正奇数x(<1000)。

输出格式:

在一行中输出相应的最小的sn,其间以1个空格分隔。

输入样例:

31

输出样例:

3584229390681 15

C语言:

1、直接大数相除

while循环中思路是:

利用111除以31如果不能除尽则利用bachelor=bachelor*10+1;继续扩大111,使之成为1111再去除以31,循环往复直到能除尽。

111除以31有余数,bachelor=bachelor*10+1;得到1111

1111除以31有余数 ,bachelor=bachelor*10+1; 得到11111

11111除以31有余数 
......

但是这个题目如果直接使用直接的大数相除会超时,以下便是暴力除法代码,此代码运行结果正确,但是存在运行超时问题,我第一次提交的结果便是以下代码,报错后又进行修改。

#include <stdio.h>
int main()
{
    int x,remainder,count=0;
    scanf("%d",&x);
    long long bachelor=1,a,i,b;
    remainder=bachelor%x;
    while(remainder!=0)
    {
        bachelor=bachelor*10+1;
        remainder=bachelor%x;
    }
    a=bachelor;
    b=bachelor/x;
    for(i=a;i>0;i/=10)
    {
        count++;
    }
    printf("%lld %d\n",b,count);
    return 0;
}
2、模拟除法

思路还是原来的思路只是计算方法进行了简化

首先需要使bachelor的值大于输入的x(以31为例),如果没有此段直接使用下方的while循环也可以完成此项

但是printf输出的时候会在开端带2个零,因为bachelor初始值是1,小于31则商0余1

经过bachelor=bachelor*10+1;得到bachelor=11依旧小于31,同样商0余11

再次经过bachelor=bachelor*10+1;得到bachelor=111大于31,此时不再商0进入while循环中

因上述原因设立第一个while循环

模拟除法思路:

将商进行输出,将余数使用bachelor=bachelor*10+1;进行扩大后再除以31,以此循环往复,此方法比直接扩大相除运算量小,时间少。

111除以31=3余18 利用111/31取整3进行输出,用111%31取余18*10+1继续进行计算count=4 
181除以31=5余26利用181/31取整5进行输出,用181%31取余26*10+1继续进行计算count=5
261除以31=8余13利用261/31取整8进行输出,用261%31取余13*10+1继续进行计算count=6
131除以31=4余7利用130/31取整4进行输出,用71%31取余7*10+1继续进行计算count=7
71除以31=2余9利用71/31取整2进行输出,用71%31取余9*10+1继续进行计算count=8
91除以31=2余29利用91/31取整2进行输出,用91%31取余29*10+1继续进行计算count=9
291除以31=9余12利用291/31取整9进行输出,用291%31取余12*10+1继续进行计算count=10
121除以31=3余28利用121/31取整3进行输出,用121%31取余28*10+1继续进行计算count=11
281除以31=9余2利用281/31取整9进行输出,用281%31取余2*10+1继续进行计算count=12
21除以31=0余21利用21/31取整0进行输出,用21%31取余21*10+1继续进行计算count=13
211除以31=6余25利用211/31取整6进行输出,用211%31取余25*10+1继续进行计算count=14
251除以31=8余3利用251/31取整8进行输出,用251%31取余3*10+1继续进行计算count=15
31除以31=1利用31/31=1取整 1进行输出而后满足if(bachelor==0)跳出循环
#include <stdio.h>
int main(){
    long long bachelor=1;
    int count=1,x;
    scanf("%d",&x);
    while(bachelor<x){
        bachelor=bachelor*10+1;
        count++;
    }
    while(1){
        printf("%d",bachelor/x);
        bachelor=bachelor%x;
        if(bachelor==0){
            break;
        }else{
            bachelor=bachelor*10+1;
        }
        count++;
    }
    printf(" %d\n",count);
    return 0;
}

标签:count,10,31,除以,bachelor,取整,L1,046,整除
From: https://blog.csdn.net/m0_55661792/article/details/140181489

相关文章

  • L1-048 矩阵A乘以B
    给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。输入格式:输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给......
  • L1-009 N个数求和 python
    python实现:需要考虑很多情况:如果只输入一个数:分子/分母是否有商,是否需要约分,如:8/3,-8/3,0/3。如果输入多个数:通分后分子>0,<0还是=0,分子/分母是否有商,是否需要约分。num=int(input())s=input()ifnum==1:fenzi=int(s.split("/")[0])fenmu=int(s.split("/")[1])......
  • 【单片机毕业设计选题24046】-基于单片机的智能鱼缸设计
    系统功能:检测水温,水温过低开启PTC加热。检测水位,水位过低开启水泵抽水。检测湿度,湿度过高则开启风扇通风。检测PH值和浑浊度,TTS语音播报功能,OLED显示系统信息,蓝牙模块连接手机APP。系统上电后显示“欢迎使用智能鱼缸系统请稍后”两秒后进入正常显示页面。第一页面第一行显......
  • 欧拉函数、整除分块和扩展欧几里得
    欧拉函数欧拉函数(写作\(\varphi(x)\)),表示\(i\in[1,x]且\gcd(i,x)=1\)的\(i\)的数量。乍一看好像很难求,但我们先考虑最简单的情况,即\(x\in\mathbb{P}\)(\(\mathbb{P}\)表示质数集)的情况。首先很容易看出\(\varphi(x)=x-1\),因为\(x\in\mathbb{P}\),所以\(\foralli......
  • 敏捷领导者(CAL1 / ALJ)认证
    没有领导力转型不会有业务转型;没有领导力的敏捷性就不会有业务的敏捷性。“领导企业转型必修课”敏捷领导力(CAL1/ALJ)认证2024年8月3-4日讲师:JimWang王军国际Scrum联盟认证导师CST、CALTrainer、ALJGuide、MBA、软硬件敏捷开发专家著有《Scrum实践精萃》和《敏捷教练......
  • L1-025 正整数A+B python
    python实现注:输入的数据需要在区间[1,1000]内s=input()loc=s.index("")a=s[:loc]b=s[loc+1:]ifa.isdecimal()andb.isdecimal():ifint(a)in[iforiinrange(1,1001)]andint(b)in[iforiinrange(1,1001)]:print("{a}+{b}={sum}......
  • OpenGL进阶系列1 - OpenGL1.x和2.x功能演进(上古历史)
    时间版本功能详细描述1992v1.0 NewList/EndList/CallListglspec10.pdfBegin/Endglspec10.pdfVertex/TexCoord/Color/Normal/Index/Rectglspec10.pdfMatrixMode/LoadMatrix/Multmatrixglspec10.pdfRoate/Translate/Scaleglspec10.pdf......
  • 修复《魔兽世界》更新后api-ms-win-core-com-l1-1-0.dll丢失问题的实战指南
    《魔兽世界》更新后api-ms-win-core-com-l1-1-0.dll丢失的快速修复,通过系统扫描、游戏重装与文件恢复,轻松解决dll缺失难题,重回艾泽拉斯大陆的冒险旅程。如果你在《魔兽世界》更新后遇到“api-ms-win-core-com-l1-1-0.dll”文件丢失的问题,可以尝试以下步骤来解决:1.系统文......
  • HC32L130 外部IO中断
    1.HC32L130外部端口PB2#include"app_SD3078.h"#defineRCC_RTC_INT_PORT SysctrlPeripheralGpio /*GPIO端口时钟*/#definePORT_RTC_INT GpioPortB /*GPIO端口*/#definePIN_RTC_INT GpioPin2 /*GPIO引脚*/voidApp_RTC_INTInit(void){stc_gpio_cfg_......
  • HC32L130/HC32L136开发之软件模拟IIC驱动AT24C64
    一、AT24C64电路图二、程序编码1.定义I2C总线连接的GPIO端口/*定义I2C总线连接的GPIO端口,用户只需要修改下面4行代码即可任意改变SCL和SDA的引脚*/#defineRCC_I2C_PORT   SysctrlPeripheralGpio      /*GPIO端口时钟*/#definePORT_I2C_SCL  ......