#15474: RE?


bsw0210903@gmail.com (Pe↗ko↘Pe↗ko↘Pe↗ko↘)

學校 : 銘傳大學
編號 : 81599
來源 : [101.137.215.124]
最後登入時間 :
2021-12-03 15:05:51
a132. 10931 - Parity -- UVa10931 | From: [36.236.150.148] | 發表日期 : 2018-10-07 15:31

 #include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
while(cin>>n){
if(n==0)
return 0;

else{
string num;
int count=0,sum=0;
while(n>0){
int tmp=n%2;
n/=2;
num[count]=tmp+'0';
count++;
}
cout<<"The parity of ";
for(int i=count-1;i>=0;i--){
sum+=num[i]-'0';
cout<<num[i];
}
cout<<" is "<< sum <<" (mod 2)."<<endl;
}
}
}

 

丟上去的時候 顯示

系統呼叫了 abort 函式! *** stack smashing detected ***: /4235110/code_4235110.exe terminated Aborted (core dumped)

求解><

 
#15480: Re:RE?


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
a132. 10931 - Parity -- UVa10931 | From: [106.105.27.148] | 發表日期 : 2018-10-07 21:38

你在宣告 string num; 時 num 預設會是空字串,
所以當你下面執行 num[count]=tmp+'0'; 
num[count] 可能會超出 num 的記憶體範圍而導致RE,
當 n=2147483647 時應該就能測出bug來了~

另外講個 string 的小技巧,
若要在字串 (string) s 後面接上字元 (char) c 可以這麼做:
s.push_bakc(c);

s += c

希望有幫助到你~ OwO

 
ZeroJudge Forum