1.题目描述:
2.解题过程
这个题目咋一看很简单,虽然最终要解出来的确也不难,但是还是稍微有些小把戏在里面,其中最大的把戏就是float 输入的精度问题,比如,一种最简单最直观的的解题方案如下:
#include <stdlib.h>#include <stdio.h>int main(){int sum = 0;float cb_this_month;for(int i=0;i<12;++i){scanf("%f",&cb_this_month);// printf("%f\n",cb_this_month );sum += (int)(cb_this_month*100);}float average = ((int)(sum/12.0+0.5))/100.0;printf("$%.2f", average);return 0;}
上面的代码看似没有问题,实际问题蛮大,若将程序中注释掉的调试代码加上,可以明显看到,输入的数和实际存入的数是不一样的,如下图:
这将导致最后的结果不准确,在online judge这种死抠的系统里面,我想肯定是过不了的,但是没想到确实过得了,估计这就是传说中的水题吧。我想这道题的彻底解决方案应该是将输入当字符串存进来。