标签:计数 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;
}
完美!
标签:计数 pre 知识 http return set 输入 include 超时
原文地址:https://www.cnblogs.com/ccq-home/p/12411182.html