zoukankan      html  css  js  c++  java
  • Project Euler 26 Reciprocal cycles( 分数循环节 )


    题意:

    单位分数指分子为1的分数。分母为2至10的单位分数的十进制表示如下所示: 1/2= 0.5 1/3= 0.(3) 1/4= 0.25 1/5= 0.2 1/6= 0.1(6) 1/7= 0.(142857) 1/8= 0.125 1/9= 0.(1) 1/10= 0.1 这里0.1(6)表示0.166666…,括号内表示有一位循环节。可以看出,1/7有六位循环节。

    找出正整数d < 1000,其倒数的十进制表示小数部分有最长的循环节。

    思路:

    仅供学习


    /*************************************************************************
        > File Name: euler026.c
        > Author:    WArobot 
        > Blog:      http://www.cnblogs.com/WArobot/ 
        > Created Time: 2017年06月28日 星期三 15时36分58秒
     ************************************************************************/
    
    #include <stdio.h>
    #include <inttypes.h>
    
    #define max(a,b) ((a) > (b) ? (a) : (b))
    #define D_MAX 1000
    #define MAX_RANGE 1000
    
    int32_t HowManyReciprocalCycles(int32_t n) {
    	int32_t rest[MAX_RANGE] = {0};		// 记录商的情况
    	int32_t ret = 1 , ind = 1;
    	while (rest[ret] == 0 && ret) {		// 如果除数之前没有出现过并且被除数没有除尽
    		rest[ret] = ++ind;				// 给出现的除数进行“标记”
    		ret *= 10;
    		ret %= n;
    	}
    	return ret ? ind - rest[ret] : 0;
    }
    int32_t main() {
    	int32_t maxLen = 0 , ans = 0;
    	for (int32_t i = 2 ; i < D_MAX ; i++) {
    		if (maxLen < HowManyReciprocalCycles(i)) {
    			maxLen = HowManyReciprocalCycles(i);
    			ans = i;
    		}
    	}
    	printf("maxLen = %d
    ",HowManyReciprocalCycles(983));
    	printf("%d
    ",ans);
    	return 0;
    }
  • 相关阅读:
    Android 6.0以上动态获取权限
    大学实验3指导:利用单链表实现A-B
    大学课程实验2指导-二叉树的建立与遍历
    大学实验1 哈夫曼编码
    大学java教案之MySQL安装图解
    DrawableAnimation小练习
    Android学习第7天
    Android学习第6天
    There's no Qt version assigned to this project for platform Win32
    OpenBCI 开发环境配置
  • 原文地址:https://www.cnblogs.com/WArobot/p/7090249.html
Copyright © 2011-2022 走看看