tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
38
Task/Roman-numerals-Encode/C/roman-numerals-encode-2.c
Normal file
38
Task/Roman-numerals-Encode/C/roman-numerals-encode-2.c
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
char *ToRoman(int num, char *buf, int buflen)
|
||||
{
|
||||
static const char romanDgts[] = "ivxlcdmVXLCDM_";
|
||||
char *roman = buf + buflen;
|
||||
int rdix, r, v;
|
||||
*--roman = '\0'; /* null terminate return string */
|
||||
if (num >= 4000000) {
|
||||
printf("Number Too Big.\n");
|
||||
return NULL;
|
||||
}
|
||||
for (rdix = 0; rdix < strlen(romanDgts); rdix += 2) {
|
||||
if (num == 0) break;
|
||||
v = (num % 10) / 5;
|
||||
r = num % 5;
|
||||
num = num / 10;
|
||||
if (r == 4) {
|
||||
if (roman < buf+2) {
|
||||
printf("Buffer too small.");
|
||||
return NULL;
|
||||
}
|
||||
*--roman = romanDgts[rdix+1+v];
|
||||
*--roman = romanDgts[rdix];
|
||||
}
|
||||
else {
|
||||
if (roman < buf+r+v) {
|
||||
printf("Buffer too small.");
|
||||
return NULL;
|
||||
}
|
||||
while(r-- > 0) {
|
||||
*--roman = romanDgts[rdix];
|
||||
}
|
||||
if (v==1) {
|
||||
*--roman = romanDgts[rdix+1];
|
||||
}
|
||||
}
|
||||
}
|
||||
return roman;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue