preface解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  阿拉伯数字转换为罗马数字的规则如下:
    1: I
    2: II
    3: III
    4: IV
    5: V
    6: VI
    7: VII
    8: VIII
    9: IX
    10: X
  而我们本题可以用到的罗马数字符号有:
    I=1
    V=5
    X=10
    L=50
    C=100
    D=500
    M=1000
  如果你还不大明白,那我们举两个例子:
    3 7 9 = CCC LXX IX
    3 4 9 9 = MMM CD XC IX
  如果你仍然不明白,那……你去USACO看原题,或者去网上搜罗马数字表示规则吧...orz
  本题给出阿拉伯数N,求出1~N所有阿拉伯数分别转换成罗马数之后,所包含的各种字符的个数。
【数据范围】
  1<=N<3500
【输入样例】
  5
【输出样例】
  I 7
  V 2
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  就像我题目描述中说的思路,把0~9分别一一对应起来便可以很容易转换了。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  一遍AC。
  顺带复习了下运算符重载。有一点失误是,开始本来打算在main里写num+=convert(i)的,可是重载时写成了加法,于是就把main里改成了num=num+convert(i)。

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 /*
ID: icedrea1
PROB: preface
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; struct number
{
int I,V; // 1,5
int X,L; // 10,50
int C,D; // 100,500
int M; //
number(int i=,int v=,int x=,int l=,int c=,int d=,int m=):I(i),V(v),X(x),L(l),C(c),D(d),M(m) {}
friend number operator+(number x,number y)
{
number r;
r.I=x.I+y.I;
r.V=x.V+y.V;
r.X=x.X+y.X;
r.L=x.L+y.L;
r.C=x.C+y.C;
r.D=x.D+y.D;
r.M=x.M+y.M;
return r;
}
friend ostream& operator<<(ostream& out,number x)
{
if(x.I) out<<"I "<<x.I<<endl;
if(x.V) out<<"V "<<x.V<<endl;
if(x.X) out<<"X "<<x.X<<endl;
if(x.L) out<<"L "<<x.L<<endl;
if(x.C) out<<"C "<<x.C<<endl;
if(x.D) out<<"D "<<x.D<<endl;
if(x.M) out<<"M "<<x.M<<endl;
return out;
}
}num; int N; number convert(int i) // 由于只需要计数,所以实际上并不需要转换全,例如4和6不用加以区分
{
number r;
int m=i/; i%=;
int c=i/; i%=;
int x=i/; i%=;
switch(i)
{
case : break;
case : r.I=; break;
case : r.I=; break;
case : r.I=; break;
case : r.V=; r.I=; break;
case : r.V=; break;
case : r.V=; r.I=; break;
case : r.V=; r.I=; break;
case : r.V=; r.I=; break;
case : r.X=; r.I=; break;
}
switch(x)
{
case : break;
case : r.X+=; break;
case : r.X+=; break;
case : r.X+=; break;
case : r.L+=; r.X+=; break;
case : r.L+=; break;
case : r.L+=; r.X+=; break;
case : r.L+=; r.X+=; break;
case : r.L+=; r.X+=; break;
case : r.C+=; r.X+=; break;
}
switch(c)
{
case : break;
case : r.C+=; break;
case : r.C+=; break;
case : r.C+=; break;
case : r.D+=; r.C+=; break;
case : r.D+=; break;
case : r.D+=; r.C+=; break;
case : r.D+=; r.C+=; break;
case : r.D+=; r.C+=; break;
case : r.M+=; r.C+=; break;
}
r.M+=m;
return r;
} int main()
{
ifstream in("preface.in");
ofstream out("preface.out"); in>>N;
for(int i=;i<=N;++i) num=num+convert(i);
out<<num; in.close();
out.close();
return ;
}

USACO Section2.2 Preface Numbering 解题报告 【icedream61】的更多相关文章

  1. USACO Section2.1 The Castle 解题报告

    castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  2. USACO Section2.1 Ordered Fractions 解题报告

    frac1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  3. USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】

    holstein解题报告 --------------------------------------------------------------------------------------- ...

  4. USACO Section2.1 Hamming Codes 解题报告 【icedream61】

    hamming解题报告----------------------------------------------------------------------------------------- ...

  5. USACO Section2.3 Controlling Companies 解题报告 【icedream61】

    concom解题报告------------------------------------------------------------------------------------------ ...

  6. USACO Section2.3 Money Systems 解题报告 【icedream61】

    money解题报告------------------------------------------------------------------------------------------- ...

  7. USACO Section2.3 Zero Sum 解题报告 【icedream61】

    zerosum解题报告----------------------------------------------------------------------------------------- ...

  8. USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】

    nocows解题报告------------------------------------------------------------------------------------------ ...

  9. USACO Section2.3 Longest Prefix 解题报告 【icedream61】

    prefix解题报告------------------------------------------------------------------------------------------ ...

随机推荐

  1. MySQL入门很简单: 6 视图

    1. 视图含义作用 视图是虚拟的表,是从数据率中一个或多个表中导出来的表:  数据库中只存放了视图的定义,没有存放视图中的数据,数据在原先的表中:  一旦表中的数据发生变化,显示在视图中的数据也会发生 ...

  2. IOS 多线程-pthread

    #import <pthread.h> @interface HMViewController () - (IBAction)btnClick; @end @implementation ...

  3. xpath模块

    W3School官方文档:http://www.w3school.com.cn/xpath/index.asp 我们使用xpath主要是获取网页数据的,之前一直是使用bs4,xpath也是最近了解到的 ...

  4. 谈谈JDK8中的字符串拼接

    字符串拼接问题应该是每个Java程序员都熟知的事情了,几乎每个Java程序员都读过关于StringBuffer/StringBuilder来拼接字符串. 在大多数的教程中,也许你会看到用+号拼接字符串 ...

  5. C++二维数组动态申请内存

    好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到 ...

  6. 1237: [SCOI2008]配对

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1789  Solved: 715[Submit][Status][Discuss] Descripti ...

  7. HashMap的使用

    HashMap的使用 import java.util.HashMap; import java.util.Iterator; //HashMap<key, value>():键值对的形式 ...

  8. 6-2 python 操作数据库mysql

    1.python操作MySQL的 查询(select操作) 步骤 import pymysql # 1.建立数据库连接 conn = pymysql.connect(host='118.24.3.40 ...

  9. float元素浮动后高度不一致导致错位的解决办方法

    换行开始的第一个元素clear:left;即可 例如  四列时应该时第5个,9个...加clear:left; .row .col-lg-3:nth-child(4n+1),.row .col-md- ...

  10. Servlet异步处理和文件上传

    1. 什么是异步处理     原来,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果!     现在异步处理的作用:在服务器开始响应后,浏览器就可以看到响应内容, ...