與正確輸出不相符(line:4)
您的答案為: VII
正確答案為: V
可是我跑了一次從0~4000裡面 所有相差為5的羅馬數字輸入都沒出現問題啊..orz
#include <stdio.h>
#include <math.h>
int main()
{
char roma1[30], roma2[30];
char inp[30];
int inte1 = 0, inte2 = 0;
int i;
int ans;
int ans1, ans2, ans3, ans4;
for (i = 0; i < 30; i++)
inp[i] = 0;
while (scanf("%s", inp) != EOF && inp[0] != '#')
{
for (i = 0; i < 30; i++)
{
roma1[i] = 0;
roma2[i] = 0;
}
scanf("%s", roma2);
for (i = 0; i < 30; i++)
roma1[i] = inp[i];
inte1 = 0;
inte2 = 0;
for (i = 0; i < 30; i++)
{
if (roma1[i] == 'M')
inte1 += 1000;
if (roma1[i] == 'D')
inte1 += 500;
if (roma1[i] == 'C')
{
if (roma1[i+1] == 'M')
{
inte1 += 900;
roma1[i+1] = 0;
}
else if (roma1[i+1] == 'D')
{
inte1 += 400;
roma1[i+1] = 0;
}
else
inte1 += 100;
}
if (roma1[i] == 'L')
inte1 += 50;
if (roma1[i] == 'X')
{
if (roma1[i+1] == 'C')
{
inte1 += 90;
roma1[i+1] = 0;
}
else if (roma1[i+1] == 'L')
{
inte1 += 40;
roma1[i+1] = 0;
}
else
inte1 += 10;
}
if (roma1[i] == 'V')
inte1 += 5;
if (roma1[i] == 'I')
{
if (roma1[i+1] == 'X')
{
inte1 += 9;
roma1[i+1] = 0;
}
else if (roma1[i+1] == 'V')
{
inte1 += 4;
roma1[i+1] = 0;
}
else
inte1 += 1;
}
}
for (i = 0; i < 30; i++)
{
if (roma2[i] == 'M')
inte2 += 1000;
if (roma2[i] == 'D')
inte2 += 500;
if (roma2[i] == 'C')
{
if (roma2[i+1] == 'M')
{
inte2 += 900;
roma2[i+1] = 0;
}
else if (roma2[i+1] == 'D')
{
inte2 += 400;
roma2[i+1] = 0;
}
else
inte2 += 100;
}
if (roma2[i] == 'L')
inte2 += 50;
if (roma2[i] == 'X')
{
if (roma2[i+1] == 'C')
{
inte2 += 90;
roma2[i+1] = 0;
}
else if (roma2[i+1] == 'L')
{
inte2 += 40;
roma2[i+1] = 0;
}
else
inte2 += 10;
}
if (roma2[i] == 'V')
inte2 += 5;
if (roma2[i] == 'I')
{
if (roma2[i+1] == 'X')
{
inte2 += 9;
roma2[i+1] = 0;
}
else if (roma2[i+1] == 'V')
{
inte2 += 4;
roma2[i+1] = 0;
}
else
inte2 += 1;
}
}
ans = abs(inte1 - inte2);
if (ans == 0)
printf("ZERO");
else
{
ans1 = ans / 1000;
ans2 = (ans / 100) % 10;
ans3 = (ans / 10) % 10;
ans4 = ans % 10;
if (ans1)
for (i = 0; i < ans1; i++)
printf("M");
switch (ans2)
{
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;
}
switch (ans3)
{
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;
}
switch (ans4)
{
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");
}
return 0;
}
與正確輸出不相符(line:4)
您的答案為: VII
正確答案為: V
可是我跑了一次從0~4000里面 所有相差為5的羅馬數字輸入都沒出現問題啊..orz
#include
#include
int main()
{
char roma1[30], roma2[30];
char inp[30];
int inte1 = 0, inte2 = 0;
int i;
int ans;
int ans1, ans2, ans3, ans4;
for (i = 0; i < 30; i++)
inp[i] = 0;
while (scanf("%s", inp) != EOF && inp[0] != '#')
{
for (i = 0; i < 30; i++)
{
roma1[i] = 0;
roma2[i] = 0;
}
scanf("%s", roma2);
for (i = 0; i < 30; i++)
roma1[i] = inp[i];
inte1 = 0;
inte2 = 0;
for (i = 0; i < 30; i++)
{
if (roma1[i] == 'M')
inte1 += 1000;
if (roma1[i] == 'D')
inte1 += 500;
if (roma1[i] == 'C')
{
if (roma1[i+1] == 'M')
{
inte1 += 900;
roma1[i+1] = 0;
}
else if (roma1[i+1] == 'D')
{
inte1 += 400;
roma1[i+1] = 0;
}
else
inte1 += 100;
}
if (roma1[i] == 'L')
inte1 += 50;
if (roma1[i] == 'X')
{
if (roma1[i+1] == 'C')
{
inte1 += 90;
roma1[i+1] = 0;
}
else if (roma1[i+1] == 'L')
{
inte1 += 40;
roma1[i+1] = 0;
}
else
inte1 += 10;
}
if (roma1[i] == 'V')
inte1 += 5;
if (roma1[i] == 'I')
{
if (roma1[i+1] == 'X')
{
inte1 += 9;
roma1[i+1] = 0;
}
else if (roma1[i+1] == 'V')
{
inte1 += 4;
roma1[i+1] = 0;
}
else
inte1 += 1;
}
}
for (i = 0; i < 30; i++)
{
if (roma2[i] == 'M')
inte2 += 1000;
if (roma2[i] == 'D')
inte2 += 500;
if (roma2[i] == 'C')
{
if (roma2[i+1] == 'M')
{
inte2 += 900;
roma2[i+1] = 0;
}
else if (roma2[i+1] == 'D')
{
inte2 += 400;
roma2[i+1] = 0;
}
else
inte2 += 100;
}
if (roma2[i] == 'L')
inte2 += 50;
if (roma2[i] == 'X')
{
if (roma2[i+1] == 'C')
{
inte2 += 90;
roma2[i+1] = 0;
}
else if (roma2[i+1] == 'L')
{
inte2 += 40;
roma2[i+1] = 0;
}
else
inte2 += 10;
}
if (roma2[i] == 'V')
inte2 += 5;
if (roma2[i] == 'I')
{
if (roma2[i+1] == 'X')
{
inte2 += 9;
roma2[i+1] = 0;
}
else if (roma2[i+1] == 'V')
{
inte2 += 4;
roma2[i+1] = 0;
}
else
inte2 += 1;
}
}
ans = abs(inte1 - inte2);
if (ans == 0)
printf("ZERO");
else
{
ans1 = ans / 1000;
ans2 = (ans / 100) % 10;
ans3 = (ans / 10) % 10;
ans4 = ans % 10;
if (ans1)
for (i = 0; i < ans1; i++)
printf("M");
switch (ans2)
{
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;
}
switch (ans3)
{
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;
}
switch (ans4)
{
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");
}
return 0;
}
羅馬數字轉成數值的地方有誤,
列舉幾項:
IX=9!=10
X=10!=11
XI=11!=12
XIX=19!=20
XX=20!=21