📄 2409463_ac_0ms_40k.c
字号:
#include <stdio.h>
int stack[100];
int p;
int FromRoman(char *s)
{
int n=0;
int prev=0;
while (*s!='\0') {
switch (*s) {
case 'M': n += 1000 - prev*2;
prev=0;
break;
case 'D': n += 500 - prev*2;
prev=0;
break;
case 'C': n += 100;
if (prev < 100) n -= 2*prev;
prev=100;
break;
case 'L': n += 50;
if (prev < 50) n -= 2*prev;
prev=0;
break;
case 'X': n += 10;
if (prev < 10) n -= 2*prev;
prev=10;
break;
case 'V': n += 5;
if (prev < 5) n -= 2*prev;
prev=0;
break;
case 'I': n += 1;
prev=1;
break;
}
s++;
}
return n;
}
void PrintRoman(int n)
{
if (n<=0 || n>4999) {
printf("out of range exception\n");
return;
}
while (n/1000) {
printf("M");
n -= 1000;
}
switch(n/100) {
case 0: break;
case 1: printf("C"); break;
case 2: printf("CC"); break;
case 3: printf("CCC"); break;
case 4: printf("CD"); break;
case 5: printf("D"); break;
case 6: printf("DC"); break;
case 7: printf("DCC"); break;
case 8: printf("DCCC"); break;
case 9: printf("CM"); break;
}
n %= 100;
switch(n/10) {
case 0: break;
case 1: printf("X"); break;
case 2: printf("XX"); break;
case 3: printf("XXX"); break;
case 4: printf("XL"); break;
case 5: printf("L"); break;
case 6: printf("LX"); break;
case 7: printf("LXX"); break;
case 8: printf("LXXX"); break;
case 9: printf("XC"); break;
}
n %= 10;
switch(n) {
case 0: break;
case 1: printf("I"); break;
case 2: printf("II"); break;
case 3: printf("III"); break;
case 4: printf("IV"); break;
case 5: printf("V"); break;
case 6: printf("VI"); break;
case 7: printf("VII"); break;
case 8: printf("VIII"); break;
case 9: printf("IX"); break;
}
printf("\n");
}
void print()
{
PrintRoman(stack[p]);
}
int main()
{
int t;
char in[10];
p = -1;
while(scanf("%s",in)==1)
{
if(in[0]=='=')
{
if(p>-1)
print();
else
printf("stack underflow\n");
continue;
}
if(in[0]=='+')
{
if(p>0)
{
t = stack[p]+stack[p-1];
stack[--p] = t;
}
else
printf("stack underflow\n");
continue;
}
if(in[0]=='-')
{
if(p>0)
{
t = stack[p-1]-stack[p];
stack[--p] = t;
}
else
printf("stack underflow\n");
continue;
}
if(in[0]=='*')
{
if(p>0)
{
t = stack[p]*stack[p-1];
stack[--p] = t;
}
else
printf("stack underflow\n");
continue;
}
if(in[0]=='/')
{
if(p>0)
{
if(stack[p])
{
t = stack[p-1]/stack[p];
stack[--p] = t;
}
else
{
p--;
printf("division by zero exception\n");
}
}
else
printf("stack underflow\n");
continue;
}
t = FromRoman(in);
if(t>0&&t<5000)
stack[++p] = t;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -