博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。...
阅读量:4872 次
发布时间:2019-06-11

本文共 976 字,大约阅读时间需要 3 分钟。

主要思路:

通过模拟除法运算过程,来判断循环节结束的位置,不断将余数*10再对除数取余得到新的余数,并记录下来,知道出现的余数之前出现过,此时小数开始循环。

例如:

假设   ->     a 是商  b是余数

(1/7) ->   (1)  a=1/7=0, b=1%7=1;

    (2)  a=(b*10)/7=1  ,  b=(b*10)%7=3;

    (3)  a=(b*10)/7=4  ,  b=(b*10)%7=2;

    (4)  a=(b*10)/7=2  ,  b=(b*10)%7=6;

    (5)  a=(b*10)/7=8  ,  b=(b*10)%7=4;

    (6)  a=(b*10)/7=5  ,  b=(b*10)%7=5;

    (7)  a=(b*10)/7=7  ,  b=(b*10)%7=1;   //与已有的余数相同开始循环

    (8)  a=(b*10)/7=1  ,  b=(b*10)%7=3;  

AC代码:

1 #include 
2 3 #define MAXN 3000 4 5 int decimal[MAXN]; 6 int numerator[MAXN]; 7 8 int main(void) 9 {10 int n, d, start, end, i, j;11 12 while(scanf("%d%d", &n, &d) != EOF) {13 i = 0;14 numerator[i] = n % d;15 decimal[i] = numerator[i] * 10 / d;16 17 for(i=1; ;i++) {18 numerator[i] = numerator[i-1] * 10 % d;19 decimal[i] = numerator[i] * 10 / d;20 21 for(j=0; j
50) {41 for(i=start; i

 

转载于:https://www.cnblogs.com/henulhy/p/10079363.html

你可能感兴趣的文章
Linux 操作
查看>>
【3】JAVA---地址App小软件(AddPanel.class)(表现层)
查看>>
Java中的代理模式
查看>>
一个linux守护进程的编写(Ubuntu环境下)
查看>>
Leetcode-1002 Find Common Characters(查找常用字符)
查看>>
面向对象编程(基础)
查看>>
AOJ 802.运输宝物
查看>>
android studio C/C++ jni 编写以及调试方法
查看>>
Oracle RMAN 的 show,list,crosscheck,delete命令整理
查看>>
JMeter属性和变量
查看>>
java之文件操作
查看>>
数据库基本语句大全
查看>>
模仿smarty迷你类代码
查看>>
Mysql单表查询
查看>>
ubuntu 12.04 不能关机
查看>>
检测某地方新闻小站
查看>>
SOAP=RPC+HTTP+XML
查看>>
【转】 Pro Android学习笔记(四五):Dialog(2):DialogFragment
查看>>
跑路(洛谷 1613)
查看>>
微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案...
查看>>