Quantcast
Channel: C++博客-所有随笔
Viewing all articles
Browse latest Browse all 7882

HDU 2090 算菜价 题解

$
0
0
算菜价

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先保留一位小数输出然后再存回去。

我去百度了一下,直接把每次的钱加起来最后保留一位小数居然可以过。
代码
 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     char a[100];
 6     double m,n,k=0;
 7     while(cin>>a>>m>>n)
 8     {
 9         k+=m*n;
10     }
11     printf("%.1lf\n",k);
12     return 0;
13 }

我的算法的代码
 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 #define MAXN 500+10
 5 char s[MAXN];
 6 int main()
 7 {
 8     //freopen("in.txt","r",stdin);
 9     double a,b,c;
10     double sum = 0;
11     while(scanf("%s%lf%lf",s,&a,&b)!=EOF)
12     {
13         c = a * b;
14         sprintf(s,"%.1lf",c);
15         sscanf(s,"%.1lf",c);
16         sum += c;
17     }
18     printf("%.1lf\n",sum);
19     return 0;
20 }


Porridge 2013-09-08 20:56 发表评论

Viewing all articles
Browse latest Browse all 7882

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>