USACO Section 2.2: Preface Numbering

搬了leetcode的代码

 1 /*

 2 ID: yingzho1

 3 LANG: C++

 4 TASK: preface

 5 */

 6 #include <iostream>

 7 #include <fstream>

 8 #include <string>

 9 #include <map>

10 #include <vector>

11 #include <set>

12 #include <algorithm>

13 #include <stdio.h>

14 #include <queue>

15 #include <cstring>

16 

17 using namespace std;

18 

19 ifstream fin("preface.in");

20 ofstream fout("preface.out");

21 

22 int N;

23 char symbol[7] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};

24 

25 string intToRoman(int num) {

26     int scale = 1000;

27     string ret;

28     for (int i = 6; i >= 0; i -= 2) {

29         int digit = num / scale;

30         if (digit != 0) {

31             if (digit <= 3) ret = ret + string(digit, symbol[i]);

32             else if (digit == 4) ret = ret + symbol[i] + symbol[i+1];

33             else if (digit == 5) ret = ret + symbol[i+1];

34             else if (digit <= 8) ret = ret + symbol[i+1] + string(digit-5, symbol[i]);

35             else if (digit == 9) ret = ret + symbol[i] + symbol[i+2];

36         }

37         num %= scale;

38         scale /= 10;

39     }

40     return ret;

41 }

42 

43 int main()

44 {

45     fin >> N;

46     map<char, int> res;

47     for (int i = 1; i <= N; i++) {

48         string s = intToRoman(i);

49         for (int j = 0; j < s.size(); j++) {

50             res[s[j]]++;

51         }

52     }

53     for (int i = 0; i < 7; i++) {

54         if (res[symbol[i]] > 0) fout << symbol[i] << " " << res[symbol[i]] << endl;

55     }

56 

57     return 0;

58 }

 

你可能感兴趣的:(number)