AC日记——计算循环节长度 51nod 1035

最长的循环节

思路:

  我们尝试一种最简单的方法,模拟;

  如何模拟呢?

  每个数,对它模k取余,如果它的余数没有出现过,就补0继续模;

  所以,当一个余数出现两次时,当前的长度即为循环节长度;

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n,ans=0,k=1,d,p=0,flag;

bool if_[10005];

int main()
{
    scanf("%d",&d);
    for(n=2;n<=d;n++)
    {
        ans=0,k=1;
        memset(if_,false,sizeof(if_));
        while(1)
        {
            if(!k) break;
            while(k<n) k*=10;
            if(if_[k]) break;
            if_[k]=true,k%=n,ans++;
        }
        if(ans>=p) p=ans,flag=n;
    }
    cout<<flag;
    return 0;
}
时间: 2024-10-09 22:35:25

AC日记——计算循环节长度 51nod 1035的相关文章

求循环小数的表示以及循环节长度

问题: 输入整数a和b,输出a/b的循环小数表示以及其循环节长度.例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21: 分析: 长除法的计算过程 ①mod = a%b: ②小数 = (mod*10) / b: ③mod = (mod*10)%b: 循环②③步,当出现重复的余数的时候,也就是循环节出现了 注意事项: 当循环上述2.3步骤时,出现余数为零的情况,即计算结果不是循环小数时,直接输出索引值,循环节长度为0. C++实现: 1 #incl

Poj1961--Period(Kmp, Next数组求循环节长度 &amp;&amp; 出现次数)

Period Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 14657   Accepted: 6967 Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the

1/n循环节长度

/* * 求1/i的循环节长度的最大值,i<=n */ const int MAXN = 1005; int res[MAXN]; // 循环节长度 int main() { memset(res, 0, sizeof(res)); int i, temp, j, n; for (temp = 1; temp <= 1000; temp++) { i = temp; while (i % 2 == 0) { i /= 2; } while (i % 5 == 0) { i /= 5; } n

循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位. 下面的方法,可以求出循环节的长度. 请仔细阅读代码,并填写划线部分缺少的代码. public static int f(int n, int m) { n = n % m;   Vector v = new Vector(); for(;;) { v.add(n); n *= 10; n = n % m; if(n==0) ret

第六届蓝桥杯java试题-循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位. 代码如下 <span style="font-size:18px;">import java.util.Vector; /** * * @author Administrator * 类名:Main * 创建时间:2015-5-1 * vesion1.0 */ public class Main { p

nyoj 329 循环小数【KMP】【求最小循环节长度+循环次数+循环体】

循环小数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 我们可爱的 c小加 近段儿正在潜心研究数学,当他学习到循环小数这一部分时不是太明白循环体是什么意思(比如说3.23232323的循环体是23.2323.23232323),假设我们现在的循环小数都是严格循环的并且有限的,也就是说不出现2.16666666(循环体为6,长度为1)的情况,只有123123这样的循环出现.给他一个小数,他需要找出最小循环体的长度.循环体和循环的次数,请你帮他解决这个问题. 输入 输

AC日记——计算2的N次方 openjudge 1.6 12

12:计算2的N次方 总时间限制:  1000ms 内存限制:  65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N. 输出 输出2的N次方的值. 样例输入 5 样例输出 32 提示 高精度计算 思路: 模拟: 来,上代码: #include<cstdio> using namespace std; int n; char s[101]; int main() { s[0]=1; scanf("%d",&n

AC日记——计算多项式的导函数 openjudge 1.5 38

38:计算多项式的导函数 总时间限制:  1000ms 内存限制:  65536kB 描述 计算多项式的导函数是一件非常容易的任务.给定一个函数f(x),我们用f'(x)来表示其导函数.我们用x^n来表示x的n次幂.为了计算多项式的导函数,你必须知道三条规则: (1).(C)' = 0 如果C是常量 (2).(C*x^n)' = C*n*x^(n-1) 如果n >= 1且C是常量 (3).(f1(x)+f2(2))' = f1'(x)+f2'(x) 容易证明,多项式的导函数也是多项式. 现在,请

AC日记——最小正子段和 51nod 1065

最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 50005 #define ll long long #define INF 0x7fffffff str