C 有人能检查一下算法吗

C 有人能检查一下算法吗,c,algorithm,C,Algorithm,此算法输入一个浮点值i,该值表示金额并返回支付该金额所需的最小硬币数,并返回一个整数c 值c1=25,c2=10,c3=5,c4=1 除了i=4.2它应该返回18个硬币,而不是返回22个硬币之外,我的代码在所有输入中都能正常工作 i=i*100; while (i>0) { if(i>=25) { c = (int) i/25; i= (int) i%25; } else if (i>=10 && i&l

此算法输入一个浮点值
i
,该值表示金额并返回支付该金额所需的最小硬币数,并返回一个整数c

值c1=25,c2=10,c3=5,c4=1

除了
i=4.2
它应该返回18个硬币,而不是返回22个硬币之外,我的代码在所有输入中都能正常工作

i=i*100;

while (i>0) {
    if(i>=25) {
        c = (int) i/25;
        i= (int) i%25;
    }
    else if (i>=10 && i<25) {
        c = c + (int) i/10;
        i=(int) i%10;
    }

    else if(i>=5 && i<10) {
        c = c + (int) i/5;
        i = (int) i%5;
    }
    else if(i<5) {
        c = c + (int) i/1;
        i = (int) i%1;
    }
}

printf("%d\n",c);
i=i*100;
而(i>0){
如果(i>=25){
c=(int)i/25;
i=(int)i%25;
}

否则,如果(i>=10&&i=5&&i,则问题在于浮点精度

float i = 4.2;
i *= 100;
printf("%f\n", i);
打印:
419.999969
而不是它应该的
4.2
,在这种情况下
419
是硬币问题中使用的值,导致使用22枚硬币
16枚/25枚
1枚/10枚
1枚/5枚
4枚/1枚
=
总共22枚

使用:
i=round(i*100);
代替
i=i*100;

您需要考虑相等的值,例如:else if(i>=10&&i<25),范围为[ini,fin],开始时关闭,结束时打开。如果通过
if
更改
else if
,则不需要
while循环

最终代码:

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

int main() {
    int c = 0;
    float iv = 4.2;
    int i = round(iv * 100);

    printf("%d\n", i);
    if (i >= 25) {
        c += i / 25;
        i = i % 25;
    }
    if (i >= 10) {
        c += i / 10;
        i = i % 10;
    }
    if (i >= 5) {
        c += i / 5;
        i = i % 5;
    }
    if (i > 0) {
        c += i;
    }
    printf("%d\n", c);

    return 0;
}
#包括
#包括
int main(){
int c=0;
浮点数iv=4.2;
int i=圆形(iv*100);
printf(“%d\n”,i);
如果(i>=25){
c+=i/25;
i=i%25;
}
如果(i>=10){
c+=i/10;
i=i%10;
}
如果(i>=5){
c+=i/5;
i=i%5;
}
如果(i>0){
c+=i;
}
printf(“%d\n”,c);
返回0;
}

有关

1.格式化代码使其可读。2.使用debuggerWow,居中?我认为GNU样式很难阅读。如果需要考虑相等的值,例如:else
if(I>=10&&I<25)
,范围是[ini,fin],开始时关闭,结束时打开。@NetVipeC是的,但回答仍然错误