算菜价
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11284 Accepted Submission(s): 6168
Problem Description
妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵。
Input
输入含有一些数据组,每组数据包括菜种(字串),数量(计量单位不论,一律为double型数)和单价(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊。菜种、数量和单价之间都有空格隔开的。
Output
支付菜价的时候,由于最小支付单位是角,所以总是在支付的时候采用四舍五入的方法把分头去掉。最后,请输出一个精度为角的菜价总量。
Sample Input
青菜 1 2
罗卜 2 1.5
鸡腿 2 4.2
Sample Output
13.4
这里就是利用了sscanf和sprintf函数 用法和scanf printf类似
sprintf的功能是将变量写到字符串中去 用法 sprintf(char*,/*输出格式如*/"%d",/*要输出的量如*/2)这样输出的结果就是"2\0";
而sscanf恰好相反是将字符串中的内容写入变量 sscanf(char*,"%d",&n) 就是将char*中的内容写入n 我是利用sprintf先保留一位小数输出然后再存回去。
我去百度了一下,直接把每次的钱加起来最后保留一位小数居然可以过。
代码
HDU2090exp.cpp
#include <iostream>
using namespace std;
int main(){
char a[100];
double m,n,k = 0;
while(cin>>a>>m>>n){
k += m * n;
}
printf("%.1lf\n",k);
return 0;
}
我的算法的代码
HDU2090.cpp
#include <iostream>
#include <cstdio>
using namespace std;
#define MAXN 500+10
char s[MAXN];
int main()
{
//freopen("in.txt","r",stdin);
double a,b,c;
double sum = 0;
while(scanf("%s%lf%lf",s,&a,&b)!=EOF)
{
c = a * b;
sprintf(s,"%.1lf",c);
sscanf(s,"%.1lf",c);
sum += c;
}
printf("%.1lf\n",sum);
return 0;
}