使用余数时,C语言返回错误的答案

时间:2015-02-15 19:41:10

标签: c

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a, b, c, d, e;
    printf("Enter the change amount in Dollars: ");
    scanf("%d", &a);
    b = a % 50;
    printf("Number of 100 Dollar bills = %d \n", b);
    c = a % 10;
    printf("Number of 50 Dollar bills = %d \n", c);
    d = a % 5;
    printf("Number of 20 Dollar bills = %d \n", d);
    e = a % 1;
    printf("Number of 1 Dollar bills = %d \n", e);
    return(0);
}

它返回错误的答案。如何解决这个问题?

............................................... ...............................

1 个答案:

答案 0 :(得分:2)

查看Modulus Operand in C

以下是该计划的错误:
我们来看看这个计算:b = a % 50;
这给了我们:100 % 50 = 0;(如果我们说输入是100) 当你试图取b的模数时会发生什么:c = b % 10;
这将为您留下0 % 10 = 0
你试图找出100除以50的余数是多少,这是零。

要解决此问题(使用您的作业):
步骤1.将输入除以100(表示100美元钞票) 步骤2.现在取输入的模数和100的数量 - 然后除以50的数量(代表50美元的钞票)。

以下是一个更好理解的例子:
让我们说你要改变的金额是285,然后:
285 / 100 = 2(这应该是2.85,但由于您使用的是整数,因此无法表示小数)

接下来:
285 / 100 = 2
285 % 100 / 50 = 1
285 % 100 % 50 / 20 = 1
285 % 100 % 50 % 20 / 1 = 15

<start value> % <previous compare value> / <newest compare value>

这导致:
100美元钞票:2
50美元钞票:1
20美元钞票:1
1美元钞票:15
这相当于285美元。

解决方案:

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

int main(){     
int a, b, c, d, e;      

printf("Enter the change amount in Dollars: ");    
scanf("%d", &a);      

b = a/100;      
c = (a%100)/50;     
d = (a%100%50)/20;     
e = (a%100%50%20)/1;       

printf("Number of 100 Dollar bills = %d \n", b);    
printf("Number of 50 Dollar bills = %d \n", c);    
printf("Number of 20 Dollar bills = %d \n", d);    
printf("Number of 1 Dollar bills = %d \n", e);    

return(0);     
}

提示:

以良好的方式安排您的C代码,如果您从C开始并希望让其他人帮助您或与其他程序员协作,您应该改进设置命令的方式。
看看我发布的解决方案,看看我如何分离计算和打印功能。这将有助于提高可读性并让您走上良好的编程之路! 如果在Stackoverflow.com上发布,请尽量使用尽可能多的时间来解释您的问题,最好是您的代码及其目的!