#37409: 會跳出系統呼叫了 abort 函式! 不知怎麼解


water02120212@gmail.com (水露珠)

學校 : 國立臺灣海洋大學
編號 : 243629
來源 : [114.24.36.150]
最後登入時間 :
2023-12-05 17:13:08
a013. 羅馬數字 -- NPSC 模擬試題 | From: [114.24.37.199] | 發表日期 : 2023-09-06 19:24

#include <iostream>
#include <cstdlib>
 
using namespace std;
int a,i,p,b,n=0;
int sum=1;
string roma,romanAnswer="";
char cina[5][15];
string all[5];
void Subtraction(void){
for (i;i<roma.size();i++)
 
{
if(roma[i]=='I' && roma[i+1]=='V')
{
sum-=4;
i++;
}else if(roma[i]=='I' && roma[i+1]=='X')
{
sum-=9;
i++;
}else if(roma[i]=='X' && roma[i+1]=='L')
{
sum-=40;
i++;
}else if(roma[i]=='X' && roma[i+1]=='C')
{
sum-=90;
i++;
}else if(roma[i]=='C' && roma[i+1]=='D')
{
sum-=400;
i++;
}else if(roma[i]=='C' && roma[i+1]=='M')
{
sum-=900;
i++;
}else if(roma[i]=='I')
{
sum-- ;
}else if(roma[i]=='V')
{
sum-=5;
}else if(roma[i]=='X')
{
sum-=10;
}else if(roma[i]=='L')
{
sum-=50;
}else if(roma[i]=='C')
{
sum-=100;
}else if(roma[i]=='D')
{
sum-=400;
}else if(roma[i]=='M')
{
sum-=1000;
}
}
}
 
void romanNumber(void){
for (i;i< roma.size();i++)
{
 
if(roma[i]=='I' && roma[i+1]=='V')
{
sum+=4;
i++;
}else if(roma[i]=='I' && roma[i+1]=='X')
{
sum+=9;
i++;
}else if(roma[i]=='X' && roma[i+1]=='L')
{
sum+=40;
i++;
}else if(roma[i]=='X' && roma[i+1]=='C')
{
sum+=90;
i++;
}else if(roma[i]=='C' && roma[i+1]=='D')
{
sum+=400;
i++;
}else if(roma[i]=='C' && roma[i+1]=='M')
{
sum+=900;
i++;
}else if(roma[i]=='I')
{
sum++ ;
}else if(roma[i]=='V')
{
sum+=5;
}else if(roma[i]=='X')
{
sum+=10;
}else if(roma[i]=='L')
{
sum+=50;
}else if(roma[i]=='C')
{
sum+=100;
}else if(roma[i]=='D')
{
sum+=400;
}else if(roma[i]=='M')
{
sum+=1000;
}else if (roma[i]=' ')
{
i++;
break;
}
 
 
}
}
void romatic(void){
int cut;
 
    int val[13] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    string ans[13] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
if(sum!=0)
{
if(sum<0){
sum*=-1;
}
    while(sum!=0){
 
    cut=sum/val[p];
    for(int u=0;u<cut;u++){
    romanAnswer+=ans[p]; 
}
sum-=val[p]*cut;
p++;
}
}else{
romanAnswer+="ZERO" ;
}
}
int main(void)
{
while(1){
sum=0;
getline(cin,roma);
//roma=cina[n];//
if(roma=="#")
{break;
}
   romanNumber();
Subtraction();
romatic();
n++;
all[b]=romanAnswer;
b++;
romanAnswer="";
i=0;
}
for(int u=0;u<n;u++){
cout<<all[u]<<endl;
}
 
return 0;
}
我想知道 呼叫了 abort 函式! 的意思 
 
#37410: Re: 會跳出系統呼叫了 abort 函式! 不知怎麼解


water02120212@gmail.com (水露珠)

學校 : 國立臺灣海洋大學
編號 : 243629
來源 : [114.24.36.150]
最後登入時間 :
2023-12-05 17:13:08
a013. 羅馬數字 -- NPSC 模擬試題 | From: [114.24.37.199] | 發表日期 : 2023-09-06 19:27

阿對 還有

溢位或者除以0的錯誤!! Floating point exception (core dumped)


我除法的地方只有在sum/val[p];

但val[p]不可能為0

sum為0時也不會進入迴圈 

很好奇這除以0的錯誤是甚麼意思

 
#37462: Re: 會跳出系統呼叫了 abort 函式! 不知怎麼解


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
a013. 羅馬數字 -- NPSC 模擬試題 | From: [27.52.136.223] | 發表日期 : 2023-09-11 20:28

1.
string all[5];
2.
}else if (roma[i]=' ')
3.
    cut=sum/val[p];
 


1. 測資很多不只五筆,建議每輸入一行就輸出一次

2. 應該是==吧

3. 這裡就是會發生除以0的地方,你的p會超出陣列範圍,所以val[p]有可能是任何數字

 
ZeroJudge Forum