中M2020春C入门练习第I段 (7-42 整除光棍 )
Posted ccq-home
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中M2020春C入门练习第I段 (7-42 整除光棍 )相关的知识,希望对你有一定的参考价值。
题目原网址 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 整除光棍 )的主要内容,如果未能解决你的问题,请参考以下文章
中M2018春C入门和进阶练习集 函数题 6-1 使用函数求素数和(20 分)