1. 程式人生 > 實用技巧 >藍橋杯-猴子吃包子-輸出小數的位數

藍橋杯-猴子吃包子-輸出小數的位數

猴子吃包子

問題描述   從前,有一隻吃包子很厲害的猴子,它可以吃無數個包子,但是,它吃不同的包子速度也不同;肉包每秒鐘吃x個;韭菜包每秒鐘吃y個;沒有餡的包子每秒鐘吃z個;現在有x1個肉包,y1個韭菜包,z1個沒有餡的包子;問:猴子吃完這些包子要多久?結果保留p位小數。 輸入格式   輸入1行,包含7個整數,分別表示吃不同包子的速度和不同包子的個數和保留的位數。 輸出格式   輸出一行,包含1個實數,表示吃完所有包子的時間。 樣例輸入 4 3 2 20 30 15 2 樣例輸出 22.50 注意 用“ * ”控制輸出小數的位數 程式碼如下:
 1 #include<iostream>
 2
#include<stdio.h> 3 using namespace std; 4 int main() 5 { 6 double a[3],b[3]; 7 int n; 8 for(int i=0;i<3;i++) 9 { 10 scanf("%lf",&a[i]); 11 } 12 for(int i=0;i<3;i++) 13 { 14 scanf("%lf",&b[i]); 15 } 16 scanf("%d",&n);
17 double sum=0; 18 for(int i=0;i<3;i++) 19 { 20 sum=sum+b[i]/a[i]; 21 } 22 printf("%.*lf",n,sum); 23 return 0; 24 }

float與double的區別:

float為單精度,記憶體中佔4個位元組,有效數位是7位(因為有正負,所以不是8位),double為雙精度,佔8個位元組,有效數位是16位。

有個例子:在C和C++中,如下賦值語句
float a=0.1;
編譯器會報錯
原因:
在C/C++中,上述語句等號右邊0.1,我們以為它是個float,但是編譯器卻把它認為是個double(因為小數預設是double),所以要報這個warning,一般改成0.1f就沒事了。