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. May 6th 2017 Week 18th Saturday

    A great ship asks deep water. 巨轮寻深水而航行. A great ship needs deep water so as to get enough buoyancy t ...

  2. IOS 制作版本新特性

    创建版本新特性 页面(存放图片) HMNewfeatureViewController.m #define HMNewfeatureImageCount 4 #import "HMNewfe ...

  3. 软件的依赖关系:类图关系:is-a has-a use-a

    基本描述: 类图关系:is-a has-a use-a: 依赖规则: 依赖倒置: 依赖注入: 接口隔离: 无环依赖: 稳定依赖: 依赖倒置描述: 底层抽象-->高层抽象 ^          ^ ...

  4. 简单的Nodejs模块

    说千遍,道万遍,不如动手做一遍,我们实现一个node所谓的模块 看下上面的图,了解一下模块自始至终的一个流程,首先是创建模块,也就是一个入口的js文件,里面加了一些特定的功能,然后导出这个模块, ex ...

  5. c# base new 等关键字基础

    base关键字 不仅可以  调用父类的 实例方法,也能狗调用父类的 构造方法 https://www.cnblogs.com/aehyok/p/3519599.html

  6. SWFUpload 参数详解

    属性   类型 默认值 描述 upload_url String 处理上传文件的服务器端页面的url地址,可以是绝对地址,也可以是相对地址,当为相对地址时相对的是当前代码所在的文档地址 preserv ...

  7. 简单介绍Spring是什么?

    对于面试者回答什么是Spring,这个问题占6分分值,分值点分布:1.Spring的核心是一个轻量级(Lightweight)的容器(Container).2.Spring是实现IoC(Inversi ...

  8. P2096 最佳旅游线路

    最大字段和加贪心 算长了个见识吧 #include<iostream> #include<cstdio> #include<algorithm> using nam ...

  9. 【ODT】cf896C - Willem, Chtholly and Seniorious

    仿佛没用过std::set Seniorious has n pieces of talisman. Willem puts them in a line, the i-th of which is ...

  10. centos6 下查看SELinux状态 关闭SELinux

    转载自:https://blog.csdn.net/boomjane_testingblog/article/details/52859977 SELinux(Security-Enhanced Li ...