sdut oj 2218 Give Me an E

http://acm.sdut.edu.cn/web/problem.php?action=showproblem&problemid=2218

好像也有点像模拟,当然这是看的解题报告。深刻感觉到string功能的强大,用起来真的很方便

题目就是把给定的那个数转换成20进制的数来确定每一位的数字,因为从 0 ~ 100 就有20个不带e的

 1 #include <iostream>
2 #include <string>
3 using namespace std;
4 string digits[] = {"00", "02", "04", "06", "30", "32", "34", "36", "40", "42", // 0~100之间20个不带e的数字
5 "44", "46", "50", "52", "54", "56", "60", "62", "64", "66"};
6 string zeroes[] = {"", "0", "0", "0", "0", "0", "0", "0000000", "0"}; //数字后加零用的,注意到题目给的那个数里,有两个单词是
7 // 单词 septillion 和 sextillion 是带e的,所以要控制零的个数
8 int main()
9 {
10 int n;
11 cin >> n;
12 while (n > 0)
13 {
14 string ans = "";
15 int k=0;
16 while (n > 0)
17 {
18 int i = n%20;
19 ans = digits[i] + zeroes[k] + ans;
20 n /= 20;
21 k++;
22 }
23 while (ans[0] == '0') // 去除前导零。str.substr(n,m)的作用就是取出从第n个字符开始到第m个字符的一个连续串
24 ans = ans.substr(1,ans.length());
25 k=ans.length()-3;
26 while (k>0)
27 {
28 ans = ans.substr(0,k)+","+ans.substr(k, ans.length()); //从后先前三个以为三个一位的叫小数点
29 k -= 3;
30 }
31 cout << ans << endl;
32
33 cin >> n;
34 }
35 return 0;
36 }

 

posted @ 2012-03-18 15:40  AC_Girl  阅读(167)  评论(0编辑  收藏  举报