题干:https://vjudge.net/problem/ZOJ-1058
题目简单,有一个取小数位数的方法值得注意:
#include<iostream>
#include<cstdio>
using namespace std;
double a[6][6];
int b[20];
int main(){
int T;
cin >>T;
while(T-->0){
for(int i = 1;i <= 5;i++)
for(int j = 1;j <= 5;j ++)
scanf("%lf",&a[i][j]);
int n;
while(scanf("%d",&n)!=EOF && n != 0){
for(int i = 1;i <= n;i++)
{
scanf("%d",&b[i]);
}
double money;
double m ;
scanf("%lf",&money);
m = money;
money= money*a[1][b[1]];
for (int i = 1;i < n; i++)
{
money = money *a[b[i]][b[i+1]];
// cout<<money<<endl;
money = (int)(money*100+0.5);
money = money/ 100;
}
money = money*a[b[n]][1];
printf("%.2lf\n",money);
}
}
return 0;
}
因为每次换货币之后都会保留两位小数,那么怎么四舍五入保留两位小数就尤其重要!
方法:m本身是小数 m = (int)(m * 100+0.5)
m = m /100.00;
这样就保证了其四舍五入保留了两位小数,如果想保留三位小数只需要1000+0.5,最后/1000*