202 - Repeating Decimals

#include <stdio.h>
#include <string.h>

using namespace std;

int isExist(int* list, int size, int val);

int main(){
    int m, n, divided[5000], count, idx, flag;
    char decimal[5000];
    while(scanf("%d%d", &m, &n) != EOF){
        count = 0, idx = -1;
        memset((void *)divided, ‘\0‘, 500);
        memset(decimal, ‘\0‘, 500);
        printf("%d/%d = %d.", m, n, m / n);
        m = m % n;
        while(true){
            m = m * 10;
            idx = isExist(divided, count, m);
            if(idx != -1){
                break;
            }
            divided[count] = m;
            decimal[count] = (m / n) + ‘0‘;
            m = m % n;
            count++;
        }
        for(int i = 0; i < idx; ++i){
            if(i >= 50){
                break;
            }
            printf("%c", decimal[i]);
        }
        printf("(");
        for(int i = idx; i < count; ++i){
            if(i >= 50){
                printf("...");
                break;
            }
            printf("%c", decimal[i]);
        }
        printf(")\n");
        printf("   %d = number of digits in repeating cycle\n\n", count - idx);
    }

}

int isExist(int* list, int size, int val){
    for(int i = 0; i < size; ++i){
        if(list[i] == val){
            return i;
        }
    }
    return -1;
}

// Sample Input
// 76 25
// 5 43
// 1 397

// Sample Output
// 76/25 = 3.04(0)
// 1 = number of digits in repeating cycle
// 5/43 = 0.(116279069767441860465)
// 21 = number of digits in repeating cycle
// 1/397 = 0.(00251889168765743073047858942065491183879093198992...)
// 99 = number of digits in repeating cycle

//https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=138

//还是要注意整除与取余在数字运算中的重要作用
//代码能力!!!

原文地址:https://www.cnblogs.com/guopinghai/p/10976402.html

时间: 2024-10-08 01:40:20

202 - Repeating Decimals的相关文章

UVa 202 Repeating Decimals

计算循环小数的循环节 输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度. 例如,a=5,b=43,小数表示为0.(116279069767441860465),循环字节长度为21 可以用数组储存数字,模拟竖式除法来解决. 附AC代码: 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 const int MAX=3050;

UVa 202 Repeating Decimals【模拟】

题意:输入整数a和b,输出a/b的循环小数以及循环节的长度 学习的这一篇 http://blog.csdn.net/mobius_strip/article/details/39870555 因为n%m的余数只可能是0到m-1中的一个,根据抽屉原理,当计算m+1次时至少存在一个余数相同 发现看了题解理解起来也好困难啊, 后来手动画了一下5/7的竖式除法的式子,,理解一些了 1 #include<iostream> 2 #include<cstdio> 3 #include<c

uva 202 Repeating Decimals 模拟

弱校连萌题目链接:http://acm.bnu.edu.cn/v3/contest_show.php?cid=5772#problem/G 需要先想到出现循环节意味着出现了以前出现过的余数 然后就自己手写一个大数除法 后来看别人博客发现其实不用STL也可以 检查余数是否出现过可以是常数级的 因为除数不大于3000 所以开一个3010的数组来存余数标记即可 当然我还是用的map 因为复杂度实在太松了 这题烦得很 注意“输出前50位”是指所有数字加起来50位... 不是小数点后50位...(哭晕在厕

UVa 202 Repeating Decimals 题解

The decimal expansion of the fraction 1/33 is 0.03, where the 03 is used to indicate that the cycle 03 repeats inde?nitely with no intervening digits. In fact, the decimal expansion of every rational number (fraction) has a repeating cycle as opposed

UVA202 UVALive5141 Repeating Decimals

问题链接:UVA202 UVALive5141 Repeating Decimals.基础训练级的问题,用C语言编写程序. 问题简述:输入两个整数numerator和denominator,分别为分子和分母.0≤分子,1≤分母≤3000.输出a/b的循环小数表示以及循环节长度.如果循环周期大于50,只显示50位,之后的全部用"..."表示. 解题思路:先取出整数部分(numerator/denominator的商),然后用余数(numerator%denominator的余数)计算小数

UVA202循环小数Repeating Decimals

Repeating Decimals The decimal expansion of the fraction 1/33 is , where the is used to indicate that the cycle 03 repeats indefinitely with no intervening digits. In fact, the decimal expansion of every rational number (fraction) has a repeating cyc

Repeating Decimals UVA - 202

1 The decimal expansion of the fraction 1/33 is 0.03, where the 03 is used to indicate that the cycle 03 2 repeats indefinitely with no intervening digits. In fact, the decimal expansion of every rational number 3 (fraction) has a repeating cycle as

UVa202 Repeating Decimals

#include <stdio.h>#include <map>using namespace std; int main(){    int a, b, c, q, r, places;    map<int, int> rmap;    pair<map<int, int>::iterator, bool> pr;    int qarr[50];    while (scanf("%d %d", &a, &

Repeating Decimals (计算循环小数)

//计算循环小数,并找出循环节以及循环节的长度,最后输出时若循环节大于50最后输出省略号. //求循环小数,记录被除数,若被除数相同了则证明循环了. //注意:即使是循环小数,但可能并不是从第一位小数开始循环 #include <iostream> #include<cstdio> #include<cstring> using namespace std; int rm[1010]; int vis[1000010]; int rec[1000010]; int ma