日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USACO training 2.4.5 Fractions to Decimals题解

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USACO training 2.4.5 Fractions to Decimals题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嗯...用到一個定理,對于一個最簡分數n/d,d=(2^x)*(5^y)*m,m≠1,那么其循環節長度為使10^L mod m==1的最小的L,不循環長度為max(x,y)

然后這題就沒什么了。。

76個字符一換行比較坑,我用了stringstream...

1 #include<iostream> 2 #include<sstream> 3 #include<cstdio> 4 #include<iomanip> 5 #include<algorithm> 6 #include<string> 7 using namespace std; 8 typedef long long LL; 9 string s; 10 int pow_mod(int a,int b,int mod) 11 { 12 LL base=a,ans=1; 13 while(b) 14 { 15 if(b&1) ans=ans*base%mod; 16 base=base*base%mod; 17 b>>=1; 18 } 19 return (int)ans; 20 } 21 int gcd(int a,int b) 22 { 23 return b==0?a:gcd(b,a%b); 24 } 25 int x,y,m,n,d; // n/d d=2^x * 5^y * m 26 int main() 27 { 28 freopen("fracdec.in","r",stdin); 29 freopen("fracdec.out","w",stdout); 30 stringstream ss; 31 cin>>n>>d; 32 int g=gcd(n,d); 33 n/=g;d/=g; 34 m=d; 35 while(m>1 && (m&1)==0) m>>=1,++x; 36 while(m>1 && (m%5)==0) m/=5,++y; 37 if(m==1) 38 { 39 if(n%d==0) ss<<n/d<<".0"; 40 else ss<<setprecision(max(x,y))<<setiosflags(ios::fixed)<<(double)n/(double)d; 41 } 42 else 43 { 44 int i; 45 for(i=1;;++i) if(pow_mod(10,i,m)==1) break; 46 //printf("%d\n",i); 47 ss<<n/d<<'.'; 48 n%=d; 49 for(int j=0;j<max(x,y)+i;++j) 50 { 51 if(j==max(x,y)) ss<<'('; 52 n*=10; 53 ss<<n/d; 54 n%=d; 55 } 56 ss<<')'; 57 } 58 ss>>s; 59 int sz=s.length(); 60 for(int i=0;i<sz;++i) 61 { 62 if(i%76==0 && i!=0) putchar(10); 63 putchar(s[i]); 64 } 65 putchar(10); 66 return 0; 67 } View Code

?

轉載于:https://www.cnblogs.com/lowsfish/p/4299410.html

總結

以上是生活随笔為你收集整理的USACO training 2.4.5 Fractions to Decimals题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。