有限小數用c語言,分數化為有限小數或無限循環小數(c實現)

問題描述:

將分數轉化為小數,相信很多人都會吧.那么,這里給定一個分數N/D,N為分子,D為分母(N,D均為整數),試編程求出N/D的小數形式,當然如果這個小數為無限循環小數,則把循環的部分用括號括起來,接著循環的部分則省略不寫。比如:

1/3??? =0.(3)

22/5=4.4

1/7??? =0.(142857)

2/2??? =1.0

3/8??? =0.375

45/56??? =0.803(571428)

輸入為兩個正整數N,D(1 <= N,D <= 100000),輸出為對應的小數(為了對齊格式,請一行最多輸出76個字符)。

樣例輸入:

1 3

22 5

1 7

對應輸出:

0.(3)

4.4

0.(142857)

============

code=================== /** *Copyright (C) aprin at Xiamen University *2005-04-23 */ #include #include #define LEN_SHANG sizeof(struct node_shang) #define LEN_YUSHU sizeof(struct node_yushu) struct node_shang {/*商結點*/ ? char data; ? struct node_shang *next; } *shang_head=0, *shang_tail=0; struct node_yushu {/*余數結點*/ ? long data; ? struct node_yushu *next; } *yushu_head=0, *yushu_tail=0; int shang_empty(void) {/*判斷商串是否空*/ ? return shang_head==0; } int yushu_empty(void) {/*判斷余數串是否空*/ ? return yushu_head==0; } struct node_shang *new_shang_node(char ch) {/*新建商的結點*/ ? struct node_shang *ptr= (struct node_shang *) malloc(LEN_SHANG); ? ptr->data=ch; ? ptr->next=0; ? return ptr; } struct node_yushu *new_yushu_node(long a) {/*新建余數結點*/ ? struct node_yushu *ptr= (struct node_yushu *) malloc(LEN_YUSHU); ? ptr->data= a; ? ptr->next=0; ? return ptr; } void insert_shang(char ch) {/*插入商字符串的結點*/ ? struct node_shang *newptr= new_shang_node(ch); ? if(shang_empty()) ??? shang_head=shang_tail=newptr; ? else { ??? shang_tail->next= newptr; ??? shang_tail= newptr; ? } } void insert_yushu(long a) {/*插入余數結點*/ ? struct node_yushu *newptr= new_yushu_node(a); ? if(yushu_empty()) ??? yushu_head=yushu_tail=newptr; ? else { ??? yushu_tail->next= newptr; ??? yushu_tail= newptr; ? } } char *longinttostr(long a, char *str) {/*將長整型轉化為字符串*/ ? char temp; ? int i, j; ? i=0; ? if(a==0) {/*a=0時特別處理*/ ??? str[0]='0'; ??? i++; ? } else { ??? while(a!=0) { ????? str[i]=(a%10)+'0'; ????? a=a/10; ????? i++; ??? } ? } ? str[i]='/0'; ? for(j=0; j<=(i-1)/2; j++) {/*倒置*/ ??? temp= str[j]; ??? str[j]= str[i-1-j]; ??? str[i-1-j]= temp; ? } ? return str;/*返回長度*/ } long found_xunhuan(void) {/*通過余數是否相等判斷是否出現循環節,若出現返回出現位置的指針ind(相對小數點的偏移量),若無反回-1*/ ? struct node_yushu *i; ? long ind; ? for(i=yushu_head, ind=0; i->next!=0; i=i->next, ind++) ??? if(yushu_tail->data==i->data) ????? return ind; ? if(i->next==0) ??? return -1; } void div(long d, long n) {/*d是被除數,n是除數*/ ? long yushu, shang_zhenshu, temp, i, len_temp; ? char str[7]; ? struct node_shang *j, *new_node; ? /*計算整數部分*/ ? shang_zhenshu= d/n; ? d=d%n; ? insert_yushu(d);/*余數保存到余數鏈表*/ ? longinttostr(shang_zhenshu, str); ? i=0; ? while(str[i]!='/0') {/*商保存到商鏈表*/ ??? insert_shang(str[i]); ??? i++; ? } ? insert_shang('.'); ? if(d==0) {/*恰好整除的情況*/ ??? insert_shang('0'); ??? return; ? } ? while((d!=0)&&((temp=found_xunhuan())==-1)) {/*當除盡或發現循環節時停止*/ ??? d=d*10;/*進位*/ ??? insert_shang((d/n)+'0'); ??? insert_yushu(d%n); ??? d=d%n; ? } ? /*除法已完成*/ ? if(temp!=-1) {/*發現循環節*/ ??? j=shang_head; ??? while(j->data!='.')/*找到小數點的位置*/ ????? j=j->next; ??? for(i=0;inext;/*找到循環節開始的前一位*/ ??? new_node= new_shang_node('('); ??? new_node->next=j->next; ??? j->next= new_node; ??? new_node= new_shang_node(')'); ??? shang_tail->next= new_node; ??? shang_tail= new_node; ? } } void output(void) { ? struct node_shang *i; ? long temp; ? i=shang_head; ? temp=0; ? while(i->next!=0) { ??? putchar(i->data); ??? i=i->next; ??? temp++; ??? if((temp%76)==0)/*每行輸出76個字符*/ ????? putchar('/n'); ? } ? putchar(shang_tail->data); ? putchar('/n'); } int main(void) { ? long d, n; ? scanf("%ld %ld", &d, &n); ? while((d<1)||(d>100000)||(n<1)||(n>100000)) { ??? printf("Input is wrong! Please inpute again!(1<=d, n<=100000)/n"); ??? scanf("%ld %ld", &d, &n); ? } ? div(d, n); ? output(); ? return 0; }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257935.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257935.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257935.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

你該把前端外包出來了

2019獨角獸企業重金招聘Python工程師標準>>> 移動熱潮慢慢褪去&#xff0c;大的幾個app已經霸占了所有的人桌面&#xff0c;而微信卻變得越來越重要。微信里面&#xff0c;提倡H5的應用&#xff0c;H5應用開發成本低、上線快、易調整、跨平臺等諸多優勢&#xff0c;…

R 統計學工具部署和使用

由于公司內部對于市場數據分析的需求&#xff0c;要求引入R統計工具&#xff0c;并集成到報表工具中。對于R的介紹&#xff0c;大家請百度一下&#xff0c;當然&#xff0c;最好能去看官方的說明 https://www.r-project.org/ 下面簡單介紹一下R工具的安裝和數據分析工具Spotfir…

USACO Dual Palindromes

輸出N個大于s的滿足條件的數&#xff0c; 對于滿足條件的數的定義是其2-10進制表示中&#xff0c;至少有兩種表示為回文串。。還是暴力&#xff1a; /*ID: m1500293LANG: CPROG: dualpal */ #include <cstdio> #include <cstring> #include <algorithm>using…

c語言庫函數fgets,C語言 標準I/O庫函數 fgets 使用心得

char *fgets(char *s, int n, FILE *stream);參數說明&#xff1a;s --指定存放所讀取的數據的位置n -- 指定所讀取數據的最大長度(這個最大長度包括了字符串結束符 \0所占據的存儲空間&#xff0c;因此&#xff0c;實際最大讀取的有效字符數是 n - 1)stream --數據源&#xff…

Android下創建一個輸入法

輸入法是一種可以讓用戶輸入文字的控件。Android提供了一套可擴展的輸入法框架&#xff0c;使得應用程序可以讓用戶選擇各種類型的輸入法&#xff0c;比如基于觸屏的鍵盤輸入或者基于語音。當安裝了特定輸入法之后&#xff0c;用戶即可在系統設置中選擇個輸入法&#xff0c;并在…

linux awk f,linux的awk詳情(上)

一丶awk介紹AWK是一種處理文本文件的語言&#xff0c;是一個強大的文本分析工具&#xff0c;可以報告生成器&#xff0c;格式化文本輸出1.常用語法awk [options] ‘program’ varvalue file…awk [options] -f programfile varvalue file…awk [options] BEGIN{ action;… } pa…

C#的async和await

C# 5.0中引入了async 和 await。這兩個關鍵字可以讓你更方便的寫出異步代碼。 看個例子&#xff1a; public class MyClass {public MyClass(){DisplayValue(); //這里不會阻塞System.Diagnostics.Debug.WriteLine("MyClass() End.");}public Task<double> Get…

eclipse創建android工程,在eclipse創建android 工程

1.在工具欄選擇"New".在彈出對話框里&#xff0c;開打android文件夾&#xff0c;選擇"android application Project"&#xff0c;選擇“Next”.2.Application Name: 應用程序名稱。Projetc Name: 工程名稱。Packet Name: 包名稱. 注意&#xff0c;包名稱…

SQL select查詢原理--查詢語句執行原則轉

1.單表查詢&#xff1a;根據WHERE條件過濾表中的記錄&#xff0c;形成中間表&#xff08;這個中間表對用戶是不可見的&#xff09;&#xff1b;然后根據SELECT的選擇列選擇相應的列進行返回最終結果。 1)簡單的單表查詢 SELECT 字段 FROM 表名 WHERE 條件表達式 那它們是按什么…

android導航二級分類,Android實現騰訊新聞的新聞類別導航效果

效果圖如下所示&#xff1a;1、在Adapter中加入如下代碼private int clickTemp -1;//TODO 被選擇的item下標/** * TODO 傳入下標&#xff0c;設置被選擇的item * * param position */public void setSelection(int position) {clickTemp position;}2、在Adapter的getView方法…

Linux下訪問window掛載的磁盤

點擊window掛在的磁盤,如下圖左側"文檔". 出現如下錯誤: Error mounting /dev/sda3 .... Command-line mount -t "ntfs" -o "uhelperudisks2 修復辦法: sudo ntfsfix /dev/sda6 參考資料: 1. win8安裝ubuntu后不能訪問windows其他磁盤轉載于:https:…

linux遍歷目錄源代碼

<pre code_snippet_id"1622396" snippet_file_name"blog_20160324_1_744516" name"code" class"cpp">遍歷目錄獲取整個目錄的占用空間: uint64_t dir_space(char *path) {int ret 0;uint64_t space 0;char cur_dir[PATH_MAX …

android studio 手動安裝gradle,Android Studio 如何安裝Gradle?

今天新下載安裝了Android Studio 2.1&#xff0c;啟動并新建第一個項目&#xff0c;結果卡在 gradle 上。網上搜原因&#xff0c;得到這個網頁&#xff1a;http://blog.csdn.net/maxsky/article/details/50204093。說是要自己下載 gradle的壓縮包&#xff0c;查了項目目錄下的 …

Label 表達式綁定

Text<%#"總金額為: "Convert.ToString(Convert.ToDecimal(TextBox1.Text)*Convert.ToInt32(TextBox2.Text)%> Page_Load { Page.DataBind(); }轉載于:https://www.cnblogs.com/handsomer/p/4150386.html

(轉)如果知道dll文件是面向32位系統還是面向64位系統的?

本文為轉載文章&#xff0c;原文地址&#xff1a;http://www.cnblogs.com/qguohog/archive/2011/09/13/2174897.html&#xff0c;僅僅是記錄供后續使用&#xff0c;如有侵權請通知刪除。 在發布dll時&#xff0c;可以選擇編譯為x86模式、x64模式以及Any Cpu模式等。那么對于已經…

Spring Roo 簡介

一直以來&#xff0c;Java/Spring開發被認為是笨重的代表&#xff0c;無法快速生成項目原型和骨架。所以&#xff0c;Spring推出了Spring Roo這個項目&#xff0c;幫助我們快速生成項目原型。本文參考自Spring Roo的官方文檔&#xff0c;如果熟悉英文的話可以直接看原文檔&…

雙緩沖 android,Android 的 SurfaceView 雙緩沖應用

075 int index 0;本文引用地址&#xff1a;http://www.eepw.com.cn/article/201610/305442.htm076 try {077 index field.getInt(R.drawable.class);078 } catch (IllegalArgumentException e) {079 // TODO Auto-generated catch block080 e.printStackTrace();081 } catch …

Windows—JDK安裝與環境變量配置

本文介紹JDK的安裝與環境變量配置。 工具/原料 JDK1.8.0_65WIN7 32bitjdk-8u65-windows-i586.exe方法/步驟 安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk &#xff0c;第二次是安裝 jre 。建議兩個都安裝在同一個java文件夾中的不同文件夾中。&…

典型案例道出“服務臺”的價值

引 言&#xff1a;作為運營管理著龐大IT系統的CIO&#xff0c;相信您或多或少都嘗試過&#xff0c;或正建有IT服務臺&#xff08;或幫助臺&#xff09;&#xff0c;然而您可能依然面臨服務效率低下&#xff0c;用戶滿意度欠佳的 困擾。這其中的原因&#xff0c;多半就在于您的服…

數據的藝術

數據的藝術概念:數據 --程序操作的對象&#xff0c;用于描述客觀事物。數據的特點:a. 可以輸入到計算機b. 可以被計算機程序處理*數據是一個抽象的概念&#xff0c;將其進行分類得到程序設計語言中的類型。數據元素 -組成數據的基本單位a. 數據項:一個數據元素由若干數據項組成…