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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CUG 数学进阶

發(fā)布時(shí)間:2024/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CUG 数学进阶 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:http://acm.cug.edu.cn/JudgeOnline/contest.php?cid=1047

.

.

.

I 題目鏈接:http://acm.cug.edu.cn/JudgeOnline/problem.php?cid=1047&pid=8

題意:給你一個(gè)0.xxx...表示的無限循環(huán)小數(shù),求其表示成分?jǐn)?shù)形式時(shí)分母最小的那個(gè)分式。

思路:首先我們要知道如何將一個(gè)無限循環(huán)小數(shù)(已知循環(huán)結(jié))化為分?jǐn)?shù),剩下的過程就是枚舉所有循環(huán)結(jié)來尋找滿足題目要求的答案。

下面來推導(dǎo)下如何將一個(gè)無限循環(huán)小數(shù)化為分?jǐn)?shù):

X = 0.a1a2…an(b1b2…bm)                ?(1)

X *10^n = a1a2…an. (b1b2…bm)            ?(2)

X *10^n - a1a2…an = 0. (b1b2…bm)           ?(3) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

(X *10^n - a1a2…an)*10^m = b1b2…bm. (b1b2…bm) ? ? (4)

(X *10n - a1a2…an)*10^m - b1b2…bm = 0. (b1b2…bm) ?(5)

(3)和(5)相等,聯(lián)立解得:

    X = (a1a2...anb1b2...bm - a1a2...an)/(10^(n+m) - 10^n) ? (*)

求出了(*)題目就基本做出來了。

** ?使用%[]格式可以輸入一個(gè)字符集,scanf("?0.%[0-9]...")格式可以輸入前面是0.開頭后面是...結(jié)尾,中間是由0-9內(nèi)范圍的數(shù)字字符組成。

關(guān)于更多的字符串輸入格式可以參見以前的博文C/C++中字符串的輸入問題

** atio函數(shù)的介紹

頭文件:#include <stdlib.h>

函數(shù)原型:int atoi( const char *str );

函數(shù)功能:將字符串str轉(zhuǎn)換成一個(gè)整數(shù)并返回結(jié)果。參數(shù)str 以數(shù)字開頭,當(dāng)函數(shù)從str 中讀到非數(shù)字字符則結(jié)束轉(zhuǎn)換并將結(jié)果返回。

返回值:字符串的整數(shù)表示形式

code:

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <cstdlib> 6 using namespace std; 7 const int MAXN = 15; 8 typedef long long LL; 9 char str[MAXN]; 10 char ups[MAXN]; 11 char dws[MAXN]; 12 13 LL gcd(LL a, LL b) 14 { 15 return !b ? a : gcd(b, a % b); 16 } 17 18 int main() 19 { 20 while (scanf(" 0.%[0-9]...", str) == 1) 21 { 22 int len = strlen(str); 23 if (str[0] == '0' && len == 1) break; 24 LL ansu, ansd; // 分別存儲分子和分母 25 ansd = 1000000000000; 26 for (int i = 0; i < len; ++i) 27 { 28 strncpy(ups, str, i); // 拷貝前i個(gè)字符到ups作為非循環(huán)部分 29 ups[i] = 0; // 添加字符串結(jié)束符 30 strcpy(dws, str + i); // 從第i個(gè)字符開始拷貝給dws(包括字符串結(jié)束符),作為循環(huán)部分 31 int lu = strlen(ups); 32 int ld = strlen(dws); 33 LL up = atoi(ups) * (pow(10, ld) - 1) + atoi(dws); // 計(jì)算分子(atoi函數(shù)將字符串轉(zhuǎn)換成一個(gè)整數(shù)并返回結(jié)果) 34 LL down = pow(10, lu + ld) - pow(10, lu); // 計(jì)算分子 35 LL d = gcd(down, up); // 計(jì)算最大公約數(shù),分子分母約分 36 up /= d; 37 down /= d; 38 if (down < ansd) // 更新分子和分母 39 { 40 ansu = up; 41 ansd = down; 42 } 43 } 44 printf("%lld/%lld\n", ansu, ansd); // 輸出分母最小的結(jié)果 45 } 46 return 0; 47 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/ykzou/p/4656437.html

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的CUG 数学进阶的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。