英文:
How to fix decimal error after the dot on Beecrowd platform for calculating percentages?
问题
当我将此代码放入“Beecrowd”平台时,生成小数点后面的数字时出现错误。
我想要结果以百分比表示:
Percentual de coelhos: 32.62 %
Percentual de ratos: 33.48 %
...
我已经从`float`更改为`double`,但仍然不起作用。
英文:
For some reason when I put this code into the "Beecrowd" platform it shows as an error when generating decimals after the dot
#include <stdio.h>
double pct_cobaias(int x, int y);
int main() {
int contador, cobaia;
char tipo;
int soma_cobaia, soma_coelho, soma_rato, soma_sapo;
double pct_coelho, pct_rato, pct_sapo;
scanf("%d", &contador);
soma_cobaia = 0;
soma_coelho = 0;
soma_rato = 0;
soma_sapo = 0;
while (contador > 0)
{
scanf("%d %c", &cobaia, &tipo);
if (cobaia >= 1 && cobaia <= 15)
{
if (tipo == 'C' || tipo == 'R' || tipo == 'S')
{
soma_cobaia += cobaia;
if (tipo == 'C')
{
soma_coelho += cobaia;
}
if (tipo == 'R')
{
soma_rato += cobaia;
}
if (tipo == 'S')
{
soma_sapo += cobaia;
}
}
}
contador--;
}
pct_coelho = pct_cobaias(soma_coelho, soma_cobaia);
pct_rato = pct_cobaias(soma_rato, soma_cobaia);
pct_sapo = pct_cobaias(soma_sapo, soma_cobaia);
printf("Total: %d cobaias\n", soma_cobaia);
printf("Total de coelhos: %d\n", soma_coelho);
printf("Total de ratos: %d\n", soma_rato);
printf("Total de sapos: %d\n", soma_sapo);
printf("Percental de coelhos: %.2lf %\n", pct_coelho);
printf("Percental de ratos: %.2lf %\n", pct_rato);
printf("Percental de sapos: %.2lf %\n", pct_sapo);
return 0;
}
double pct_cobaias(int x, int y) {
double pct;
pct = (x * 100) / y;
return pct;
}
I would like the result in percent:
Percentual de coelhos: 32.62 %
Percentual de ratos: 33.48 %
...
I already changed from float
to double
and it still doesn't work
答案1
得分: 1
你可以使用以下翻译好的代码部分:
你可以使用以下代码来计算百分比:`pct = (x * 100.0) / y;`,但是请注意,`x` 和 `y` 的类型是 `int`,所以编译器会使用整数运算,结果也将是整数。你可以通过这样修复这个问题:
```c
pct = (x * 100.0) / y;
另外,请注意,在 printf
的格式字符串中,你必须使用 %%
来输出 %
字符。
这是修改后的代码版本:
#include <stdio.h>
int main(void) {
int contador, cobaia;
char tipo;
double pct_coelho, pct_rato, pct_sapo;
int soma_cobaia = 0;
int soma_coelho = 0;
int soma_rato = 0;
int soma_sapo = 0;
if (scanf("%d", &contador) != 1)
return 1;
while (contador > 0) {
if (scanf("%d %c", &cobaia, &tipo) != 2)
break;
if (cobaia >= 1 && cobaia <= 15) {
switch (tipo) {
case 'C':
soma_coelho += cobaia;
soma_cobaia += cobaia;
break;
case 'R':
soma_rato += cobaia;
soma_cobaia += cobaia;
break;
case 'S':
soma_sapo += cobaia;
soma_cobaia += cobaia;
break;
default:
printf("未知产品类型\n");
break;
}
} else {
printf("无效数量:%d\n", cobaia);
}
contador--;
}
pct_coelho = soma_coelho * 100.0 / soma_cobaia;
pct_rato = soma_rato * 100.0 / soma_cobaia;
pct_sapo = soma_sapo * 100.0 / soma_cobaia;
printf("总共: %d 仓鼠\n", soma_cobaia);
printf("总共的兔子: %d\n", soma_coelho);
printf("总共的老鼠: %d\n", soma_rato);
printf("总共的青蛙: %d\n", soma_sapo);
printf("百分比的兔子: %.2f %%\n", pct_coelho);
printf("百分比的老鼠: %.2f %%\n", pct_rato);
printf("百分比的青蛙: %.2f %%\n", pct_sapo);
return 0;
}
希望这对你有所帮助!
英文:
You compute the percentage with pct = (x * 100) / y;
but x
and y
have type int
so the compiler uses integer arithmetics and the result is an integer. You can fix this problem by writing:
pct = (x * 100.0) / y;
Also note that you must use %%
in the printf
format string to output a %
character.
Here is a modified version:
#include <stdio.h>
int main(void) {
int contador, cobaia;
char tipo;
double pct_coelho, pct_rato, pct_sapo;
int soma_cobaia = 0;
int soma_coelho = 0;
int soma_rato = 0;
int soma_sapo = 0;
if (scanf("%d", &contador) != 1)
return 1;
while (contador > 0) {
if (scanf("%d %c", &cobaia, &tipo) != 2)
break;
if (cobaia >= 1 && cobaia <= 15) {
switch (tipo) {
case 'C':
soma_coelho += cobaia;
soma_cobaia += cobaia;
break;
case 'R':
soma_rato += cobaia;
soma_cobaia += cobaia;
break;
case 'S':
soma_sapo += cobaia;
soma_cobaia += cobaia;
break;
default:
printf("unknown product type\n");
break;
}
} else {
printf("invalid amount: %d\n", cobaia);
}
contador--;
}
pct_coelho = soma_coelho * 100.0 / soma_cobaia;
pct_rato = soma_rato * 100.0 / soma_cobaia;
pct_sapo = soma_sapo * 100.0 / soma_cobaia;
printf("Total: %d cobaias\n", soma_cobaia);
printf("Total de coelhos: %d\n", soma_coelho);
printf("Total de ratos: %d\n", soma_rato);
printf("Total de sapos: %d\n", soma_sapo);
printf("Percental de coelhos: %.2f %%\n", pct_coelho);
printf("Percental de ratos: %.2f %%\n", pct_rato);
printf("Percental de sapos: %.2f %%\n", pct_sapo);
return 0;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论