zoukankan      html  css  js  c++  java
  • UVA-202 Repeating Decimals(模拟)

     

     首先可以确定,一个分数,是肯定能化成循环小数的。

    这里把小数所有位数枚举出来显然不可行,因为并不知道这小数到底有多少位,所以不能将其枚举再找周期;

    我们想一想,如果是手算,遇到循环节的时候一定是出现了前面出现过的余数,所以可以通过这种方式找循环节。

    ↑有时候纯暴力无法解决的模拟题想想如果是人自己该怎么算↑

    这道模拟题不同阶段之间的问题主要表现在一定要分清楚当前位的商对应的是当前位的余数!!!一定不能混淆!!!

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 const int MAX=3005;
     4 int n,m,dig;
     5 int a[MAX],vis[MAX];
     6 int main(){
     7     freopen ("repeat.in","r",stdin);
     8     freopen ("repeat.out","w",stdout);
     9     int i,j,p,q,nn,mm;bool flag;
    10     while (~scanf("%d%d",&n,&m)){
    11         memset(a,0,sizeof(a));
    12         memset(vis,-1,sizeof(vis));
    13         nn=n,mm=m;dig=n/m;n=n%m;vis[n]=0;
    14         while (1){
    15             n*=10;
    16             a[++a[0]]=n/m;
    17             if (vis[n%m]!=-1) break;
    18             vis[n%m]=a[0];
    19             n%=m;
    20         }
    21         printf("%d/%d = %d.",nn,mm,dig);
    22         for (i=1;i<=vis[n%m];i++) printf("%d",a[i]);
    23         printf("(");
    24         if (a[0]<=50)
    25             for (;i<=a[0];i++) printf("%d",a[i]);
    26         else{
    27             for (;i<=50;i++) printf("%d",a[i]);
    28             printf("...");
    29         }
    30         printf(")
       %d = number of digits in repeating cycle
    
    ",a[0]-vis[n%m]);
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    WCF中的序列化[下篇]
    WCF中的序列化[上篇]
    SET TRANSACTION ISOLATION LEVEL 详解
    深入探讨数据仓库建模与ETL的实践技巧
    用SQL语句添加删除修改字段等操作
    WCF数据契约与序列化
    在SQL Server中使用检查约束来验证数据
    C#线程同步的几种方法[转]
    Linq的Join用法
    测试wlm代码高亮插件
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/13854576.html
Copyright © 2011-2022 走看看