码迷,mamicode.com
首页 > 其他好文 > 详细

中M2020春C入门练习第I段 (7-42 整除光棍 )

时间:2020-03-04 19:13:03      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:计数   pre   知识   http   return   set   输入   include   超时   

题目原网址 https://pintia.cn/problem-sets/1222362023341477888/problems/1222362900697600007

第一次做的时候我的想法(想的太简单了嘤嘤嘤)

就是让光棍那个数一直增大,然后来除那个输入的数字,当可以整除的时候 ,输出光棍数/输入的数字,依次做的时候就计数呗!
于是
满心欢喜的写完
咦 为什么数据过大就开始超时QAQ
左思右想还是不会

学习借鉴

然后 看柳神的代码
这是什么QAQ 这么简单?为什么这么做?我为什么看不懂?然后
强行用代码来想 最高位开始计算结果先算出3,发现余数不为0,那就在余数末尾加1当除数,再算出5....一直到发现余数为0了,除法计算就结束了。
开始Google

知识小课堂!!!!

1.原理就是竖式除法(知识盲区....)
除数为x, 被除数开始需要在末位不断添1直到被除数不小于除数,再求商,求出第一个商后求出余数,如果为0运算结束,否则在余数末尾添1,循环。
继续科普
2.模拟除法的算法思想:
1=d1=q?x+r(0≤r<x),其中q为商r为余数1=d1=q?x+r(0≤r<x),其中q为商r为余数
11=d2=10?d1+1=10q?x+(10r+1),(0<10r+1<10x),?,所以高一位的商值若由上一步确定了,往后低位的上商都不会对其造成影响,因为每位的商最多为9.因此整数除法可自高位开始逐位确定商值.

然后 借柳神思路用C语言来写(等我把C语言干完,我就开始c++!!!我就可以不用强行翻了哈哈哈)

#include <stdio.h>

int main()
{
    int x,s=1,n=1;
    scanf("%d",&x);
    while(s<x)
    {
        s=s*10+1;
        n++;
    }
    while(1) {
        printf("%d",s/x); 
        if(s%x==0) break;
        s=(s%x)*10+1;
        n++;
    }
    printf(" %d",n);
    return 0;
}

完美!

中M2020春C入门练习第I段 (7-42 整除光棍 )

标签:计数   pre   知识   http   return   set   输入   include   超时   

原文地址:https://www.cnblogs.com/ccq-home/p/12411182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!