CODEWARS_个人记录2

5人阅读 评论(0) 收藏 举报
分类:

4 kyu

题目:Roman Numerals Encoder

DESCRIPTION:

Create a function taking a positive integer as its parameter and returning a string containing the Roman Numeral representation of that integer.

Modern Roman numerals are written by expressing each digit separately starting with the left most digit and skipping any digit with a value of zero. In Roman numerals 1990 is rendered: 1000=M, 900=CM, 90=XC; resulting in MCMXC. 2008 is written as 2000=MM, 8=VIII; or MMVIII. 1666 uses each Roman symbol in descending order: MDCLXVI.

Example:

solution(1000); // => "M"
Help:

Symbol    Value
I          1
V          5
X          10
L          50
C          100
D          500
M          1,000
Remember that there can't be more than 3 identical symbols in a row.
My solution:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char sym[7] = {'I','V','X','L','C','D','M'};

void myfun(int n,int flag,char *res){
    printf("n=%d\n",n);
    switch(n){
        case 1:
          sprintf(res,"%c",sym[flag*2]);
        break;
        case 2:
          sprintf(res,"%c%c",sym[flag*2],sym[flag*2]);
        break;
        case 3:
          sprintf(res,"%c%c%c",sym[flag*2],sym[flag*2],sym[flag*2]);
        break;
        case 4:
          sprintf(res,"%c%c",sym[flag*2],sym[flag*2+1]);
        break;
        case 5:
          sprintf(res,"%c",sym[flag*2+1]);
        break;
        case 6:
          sprintf(res,"%c%c",sym[flag*2+1],sym[flag*2]);
        break;
        case 7:
          sprintf(res,"%c%c%c",sym[flag*2+1],sym[flag*2],sym[flag*2]);
        break;
        case 8:
          sprintf(res,"%c%c%c%c",sym[flag*2+1],sym[flag*2],sym[flag*2],sym[flag*2]);
        break;
        case 9:
          sprintf(res,"%c%c",sym[flag*2],sym[(flag+1)*2]);
        break;
    } 
}

char *solution(int n) {
  // Your code here
  int num;
  int i=0;
  int len=0;
  char temp[100];
  char *res = malloc(255);
  
  res[0]= '\0';
  while(n){
    num = n%10;
    if(num){
      myfun(num,i,temp);
      strcat(temp,res);
      sprintf(res,"%s",temp);
    }
    n /= 10;
    i++;
  }
  printf("%s\n",res);
  return res;
}

查看评论

Python全栈工程师-第2周

Python全栈工程师-第2周
  • 2017年09月15日 17:31

CODEWARS_个人记录(1)

4 kyu题目:String MIX描述:Given two strings s1 and s2, we want to visualize how different the two strings...
  • melo_fang
  • melo_fang
  • 2018-04-17 18:02:20
  • 39

选择有2条以上记录的个人顺序号和它的记录行数

在失业人员资料表中,一个个人顺序号对应多个失业资料顺序号 即一个个人顺序号在失业人员资料中可能对应多条记录。 选择有2条以上记录的个人顺序号和它的记录行数。 select  grsxh,...
  • qq_26222859
  • qq_26222859
  • 2016-08-23 14:57:57
  • 261

Hive中“一行变多行”、“多行合成一行”的实现实例

[ Author: Fu Renjie ] Ø  一行变多行过程: // 一行拆分多行的操作:主要是拆分subcat不为空的记录,sql语句如下: insert into table today...
  • BDCHome
  • BDCHome
  • 2015-10-10 16:19:24
  • 3643

学习笔记(个人记录)

nginx学习笔记,记录用
  • li201040600164
  • li201040600164
  • 2017-12-25 23:40:19
  • 77

个人理财明细EXCEL表

  • 2012年11月09日 12:07
  • 80KB
  • 下载

2015.7个人反思小结以及后续规划

2015.7个人反思小结以及后续规划标签(空格分隔): 反思小结缘由: 总觉得有必要为自己写一篇小结,有些东西会跟随着时光慢慢被淡忘,写小结感觉和拍照一样,都是用来 记录自己曾经的点点滴滴,...
  • zpj779878443
  • zpj779878443
  • 2015-07-18 21:39:59
  • 31165

sql常见问题汇总:同一会员两次刷卡记录间隔不大于2分钟的记录

--表信息 连锁店编号 会员卡号 录入员工号  录入终端  录入时间     2012001001 12345678 2012000001  00000001  20120510 16:29:...
  • gjswxhb
  • gjswxhb
  • 2012-05-12 21:54:50
  • 1897

个人工作记录软件MyBase

  • 2010年05月25日 10:58
  • 637KB
  • 下载

个人教程记录doc(私有)

  • 2009年12月08日 22:04
  • 39KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 3505
    积分: 218
    排名: 32万+
    最新评论