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. IOS 自定义代理delegate方法

    创建一个自定义代理 @class MJTgFooterView; /** 1.协议名称: 控件类名 + Delegate 2.代理方法普遍都是@optional 3. */ @protocol MJT ...

  2. 在vue中同时使用过渡和动画

    在上次的动画中,在显示和隐藏有动画效果,但是,刷新页面的时候,第一次的显示没有动画效果 需求:刷新页面的时候也有动画效果 <transition name='fade' appear enter ...

  3. flex布局-常用布局

    在使用flex布局,老是需要去查资料,很多常用的,知道大概,可还是需要去过一遍,这里记录一下几个常用的flex布局 一个div,内容垂直居中 html <div className='topHe ...

  4. 2018.8.17 关于JavaScript的几种常见的全局函数

    JavaScript常见的全局函数 <!doctype html> <html lang="en"> <head> <meta chars ...

  5. 关于 npm install 命令

    使用 `npm install` 命令安装模块时 ,有以下几种形式: 安装模块到项目 node_modules 目录下,不会将模块依赖写入 dependencies 或 devDependencies ...

  6. 命令搜索命令whereis与which

    whereis 命令名 #搜索命令所在路径及帮助文档所在位置,只能搜索系统命令. 选项: -b: 只查找可执行文件 -m: 只查找帮助文件 whoami whatis ls #ls 是什么命令 whi ...

  7. jQuery实现轮播切换以及将其封装成插件(2)

    在上一篇博文中,我们完成了一个简单的轮播切换.它的功能比较简单,仅仅能定时切换图片. 但是有没有这样一种情况.当我们特意的想看某一个轮播显示项时不希望等轮播一圈才能等到,希望通过图上的一些元素,触发某 ...

  8. ADO.NET之一:连接层

    ADO.NET大部分由System.Data.dll核心程序集来表示. ADO.NET类库有三种完全不听的方式来实现数据访问:连接式.断开式和通过Entity框架.连接式就是会一直占用网络资源,断开式 ...

  9. CentOS 系统 Docker 的命令大全

    本文记录 CentOS 系统 Docker 的命令大全 命令 docker ps 显示运行中的容器 docker ps -a 显示所有容器 docker start 容器名称 启动容器 docker ...

  10. (转)为什么国外 MMORPG 中不采用自动寻路等功能?

    不只是自动寻路,现在网游中的教学引导系统,辅助系统的功能强大程度,友好程度都可以说到了变态的程度,开发这些功能投入的资源甚至要超过游戏内容本身.究其原因,还是竞争越来越激烈,人心越来越浮躁,游戏商家为 ...