生活随笔
收集整理的這篇文章主要介紹了
使用C语言编写一个算数的除法运算(保留n位小数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述
分數化小數(decimal)
輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點后c位。a,b≤106 ,c≤100。輸入包含多組數據,結束標記為a=b=c=0。
#include<stdio.h>
void question(int a
,int b
,int c
)
{int i
;printf("%d.", a
/ b
);for (i
= 1; i
<= c
; i
++) {a
%= b
; a
*= 10; if (i
== c
&& ((a
% b
) * 10 / b
>= 5)) printf("%d", a
/ b
+ 1);elseprintf("%d", a
/ b
);}printf("\n");
}
void questionPlus(int a
,int b
,int c
)
{int i
, j
, integer
, demical
;demical
= 1;integer
= a
/ b
;for (i
= 1; i
<= c
; i
++){a
%= b
;a
*= 10;if (i
== c
&& ((a
% b
) * 10 / b
>= 5)) demical
= demical
* 10 + a
/ b
+ 1;else if(i
==1)demical
= demical
+ a
/ b
;elsedemical
= demical
*10 + a
/ b
;}for (j
= 1, i
=1; i
< c
; i
++) j
*= 10;if ((demical
- j
) / (j
* 10) != 0){integer
++;demical
-= j
* 10;}printf("%d.", integer
);for (i
= 1; i
<= c
; i
++){if (i
== 1) printf("%d", demical
/ j
- 1);else{demical
%= j
;j
/= 10;printf("%d", demical
/ j
);}}printf("\n");
}
void questionPlusPlus(int a
,int b
,int c
)
{int i
, j
, integer
, demical
[c
];integer
= a
/ b
;for (i
= 1; i
<= c
; i
++){a
%= b
;a
*= 10;if (i
== c
&& ((a
% b
) * 10 / b
>= 5)) demical
[i
-1] = a
/ b
+ 1;elsedemical
[i
-1] = a
/ b
;}for(i
=c
-1;i
>=0;i
--){if(demical
[i
]==10){if(i
==0) integer
++;else demical
[i
-1]++;demical
[i
]=0;}}printf("%d.", integer
);for (i
= 0; i
< c
; i
++)printf("%d", demical
[i
]);printf("\n");
}
int main(void)
{int a
, b
, c
;while ((printf("請輸入三個數:"))&&scanf("%d%d%d", &a
, &b
, &c
) == 3 && !(a
== b
&& b
== c
&& c
== 0)){printf("------第一個函數------\n");question(a
,b
,c
);printf("------第二個函數------\n");questionPlus(a
,b
,c
);printf("------第三個函數------\n");questionPlus(a
,b
,c
);}
}
進行函數輸出:
可以發現進行輸入19999 20000 3 的時候,輸出的結果出現不一致的問題,而第二個和第三個函數是正確的輸入形式。
但是,對于現在來說,因為能力有限,不能進行相應的優化,第三種函數為最簡單的一種函數了。
總結
以上是生活随笔為你收集整理的使用C语言编写一个算数的除法运算(保留n位小数)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。