1. 程式人生 > >C語言:計算分數精確值

C語言:計算分數精確值

1 計算分數精確值(10分)
題目內容:
由於計算機內部表達方式的限制,浮點運算都有精度問題,為了得到高精度的計算結果,就需要自己設計實現方法。
(0,1)之間的任何浮點數都可以表達為兩個正整數的商,為了表達這樣兩個數的商,可以將相除的結果存放在一維陣列中,陣列的每個元素存放一位十進位制數字。即商的第一位存放在第一個元素中,第二位存放在第二個元素中,以此類推,就可以用陣列來表達一個高精度的除法結果了。
如16/19的結果0.8421052631…就可以依次存放8、4、2、1、0、5、2、6、3、1…在陣列中。
而除法的過程,則可以模仿人工列豎式做除法的方式,先將被除數乘以10,得到一位商以後,將餘數乘以10作為下一輪計算的被除數:
160/19->8餘8
80/19->4餘4

當某次餘數為0時,則表明除盡。
現在,請寫一個程式,輸入一個分數,計算出它的小數形式。無論是否可以除盡,輸出最多小數點後200位。

輸入格式:
形如
a/b
的兩個數,其中10<=a

#include <stdio.h>
#include <stdlib.h>

/*

現在,請寫一個程式,輸入一個分數,計算出它的小數形式。無論是否可以除盡,輸出最多小數點後200位。

 */

int *calculator(int a, int b);

int main() {
//    printf("Hello, World!\n");
    int a, b;
//    printf("%s\n", "input a,b from console:");
    scanf("%d/%d", &a, &b);
//
a = 16, b = 19; // printf("a/b = %d/%d\n", a, b); int *pInt = calculator(a, b); int *p = pInt; // printf("第一位是0哦 %d\n",*p); printf("%s", "0."); int count = 0; while (++p != NULL) { // 剛好跳過第一位! if (count > 200) { break; } printf("%d", *p); count++; } printf
("%s", "\n"); return 0; } int *calculator(int a, int b) { // 10<=a<b<100if (a < 10 || b >= 100 || a >= b) { printf("%s\n", "10<=a<b<100 , 條件不滿足"); return NULL; } int *ret = calloc(200, sizeof(int)); int *tmp = ret; int count = 0; while (a % b != 0) { if (a < b) { a *= 10; tmp++; } *tmp = (a / b); a = a % b; count++; if (count > 200) { *tmp = '\0'; // useless break; } } return ret; }
console:
16/19  # 這個是輸入,下面的是輸出
0.842105263157894736842105263157894736842105263157894736842105263157894736842105263157894736842105263157894736842105263157894736842105263157894736842105263157894736842105263157894736842105263157894736840

Process finished with exit code 0

相關推薦

C語言計算分數精確

1 計算分數精確值(10分) 題目內容: 由於計算機內部表達方式的限制,浮點運算都有精度問題,為了得到高精度的計算結果,就需要自己設計實現方法。 (0,1)之間的任何浮點數都可以表達為兩個正整數的

C語言計算階乘和階乘的和

從鍵盤輸入一個數,用C語言計算該數的階乘 #include <stdio.h> #include<stdlib.h> int main() { int i,sum = 0, p = 1, n; scanf("%d",&n); if(

C語言計算某年某月某日是這一年的第幾天

C語言:計算某年某月某日是這一年的第幾天 我是一名在校大學生,初次寫部落格,希望各位大佬不喜勿噴,這個小程式,僅供參考,希望對大家有所幫助。 分析題意: 1.判斷使用者輸入的年數是閏年還是平年。 2.如何將不同月份的天數相加。 定義: 1.Input()函式,接收使用者輸

C語言計算兩個集合的並集

#include<stdio.h> #include<stdlib.h> #include<time.h> #define NUMBER1 7 #define NUMBER2 5 void createCollect(int [],int

我的第四個C語言計算圓柱體的表面積和體積。

問題及程式碼: 問題:計算圓柱體的表面積和體積。 程式碼:#include <stdio.h> #include <stdlib.h> int main() { float r,h,S,V; printf("請輸入圓柱體的半徑\n"

c語言計算存款利息

程式: #include<stdio.h> int main() { float  P0=1000,R1=0.0036,R2=0.0225,R3=0.0198,P1,P2,P3 ; P1 

C語言計算兩個集合的交集

#include<stdio.h> #include<stdlib.h> #include<time.h> #define NUMBER1 7 #define NU

C語言計算並輸出S=1+(1+2^0.5)+(1+2^0.5+3^0.5)...+(1+2^0.5+3^0.5+...+n^0.5)

輸出 nbsp clas return %d span file fprintf 計算 //計算並輸出S=1+(1+2^0.5)+(1+2^0.5+3^0.5)...+(1+2^0.5+3^0.5+...+n^0.5) 1 #include<math.h>

C語言計算並輸出給定10個數的方差。

include pen printf style i++ double The span col //計算並輸出給定10個數的方差。 1 #include<math.h> 2 #include<stdio.h> 3 double fu

C語言指針實現交換兩個變量的

實現 urn sign ret 語言 div title void itl 用指針交換兩個變量的值(10分) 題目內容: 用指針交換兩個變量的值 主函數參考: int main( ) { int a,b; scanf("%d%d",&a,&b)

C語言求10 個整數中最大

求10 個整數中最大值思路:求10 個整數中最大值,可以利用陣列來完成對10個數的儲存,再用迴圈語句和條件語句來判斷數的大小, 把最大值賦值給最大值變數max,然後輸出最大值。 程式碼如下: #include<stdio.h> int main() { int i,max;

C語言給定兩個整形變數的,將兩個的內容進行交換

給定兩個整形變數的值,將兩個值的內容進行交換,有三種不同的方法。第一種:定義一個中間變數,使得兩個數值交換。第二種:利用兩個數值之間相互加減,使得兩個數值交換。第三種:利用異或運算,使得兩個數值交換。第一種方法程式碼如下: #include<stdio.h> int main() {

C語言函式中引數的傳與傳地址

任務程式碼: #include <stdio.h> void swap(int *a ,int *b)//按之前對指標認識,*a代表指標變數a,a儲存的是地址,*a是地址的值。 { //但是可以看到下面傳輸過程中swap(

C語言問題

求最值問題 1.輸入n個整數,求最大值,最小值和平均值 #include<stdio.h> int main() { int i, avg = 0, max = 0, min = 0, n, k; printf("請

C語言之差

題目: #include <stdio.h> int main() { int n,a[10000],i=0,max,min,t; scanf("%d",&n); while(scanf("%d",&a[i])!=EOF) i++; max=

C語言最大與最小對調

題目: #include <stdio.h> int main() { int n,a[10000],i,max,min,t,x=0,y=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i])

c語言根據輸入的分數,判斷其所在的等級,使用switch語句

#include<stdio.h> int main() { int score; char grade; printf("請輸入分數:"); scanf("%d",&score); int i; i=score/10; while(sco

C語言利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中對其進行賦,陣列元素的型別不限,輸出該二維陣列以及各行的均值

題目來源:大工慕課 連結 作者:Caleb Sung 題目要求 利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值,各行

c語言求多項式1-1/2+1/3-1/4+...+1/99-1/100的,3種迴圈實現

方法一:for迴圈實現 程式: #include<stdio.h> int main() { double i = 0, t = 0,sum = 0,sign = -1; for (i =

C語言程式設計 計算程式執行時間 精確到微秒

在開發過程中有時候需要計算一段程式碼執行所消耗的時間 ,使用函式gettimeofday就可以實現,並且可以精確到毫秒 gettimeofday函式原型為:      int gettimeofday(struct timeval *tv, struct timezone