2014-09-29 46 views
0

這是一個簡單的問題,計算給定N值所需的最少硬幣數量。爲什麼分區0.04/0.01給3?分部給出錯誤的answear

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

int MinQtdCoins(float N, float coins[], int qtdCoins) 
{ 
    int i, qtdMinCoins = 0; 
    int numCoins=0; 
    for(i=0; i<qtdCoins; i++) 
    { 
     if(N > coins[i] || fabs(N - coins[i]) < 0.0000000001) // N >= coins[i] 
     { 
      numCoins = (int)(N/coins[i]); 
      printf("Number of Coins: %f divided by %f = %d, ",N,coins[i],numCoins); 
      qtdMinCoins += numCoins; 
      N = N - numCoins*coins[i]; 
      printf("remains: %f\n",N); 

     } 
    } 
    return qtdMinCoins; 
} 

int main() 
{ 
    int qtdCoins = 5; 
    float coins[] = {0.50, 0.25, 0.10, 0.05, 0.01}; 
    float N=9.79; 

    printf("\n\n%d\n",MinQtdCoins(N, coins, qtdCoins)); 
    return 0; 
} 
+0

在猜測我說你正在執行一個浮點除法,讓一個答案接近,但小於4,並截斷它爲一個整數得到3.嘗試乘以你的目標和硬幣的值100,以便整個計算可以完成整數 – 2014-09-29 02:35:54

+0

相關,如果不重複:http:///stackoverflow.com/questions/24665459/best-practices-for-floating-point-arithmetics – 2014-09-29 03:11:55

回答

5

分工0.04/0.01給出了3,爲什麼呢?

numCoins = (int)(N/coins[i]); 

鑄造到int只是截斷小數部分。所以如果0.04/0.01 == 3.999..(由於四捨五入),結果是3

+0

解決它的最佳方法是什麼? – 2014-09-29 02:47:03

+0

不要使用整數? – 2014-09-29 02:48:36

+1

@MartinJames:不,不要用浮點來代表金錢。使用整數美分。 – 2014-09-29 02:49:54

0

你正在做的浮點除法,並保持在一個整數的價值......因爲這個值被截斷爲3