標題:
d058: BASIC 的 SGN 函數
[打印本頁]
作者:
buy
時間:
2010-10-30 08:51
標題:
d058: BASIC 的 SGN 函數
內容 : 正體->简体
在 BASIC 語言中有一個 SGN 函數,(VB .Net 改成 Math.Sign),它會根據參數的正負號傳回 1, 0, 或 -1。請你寫一個程式來模仿這個函數,給你一個整數 n,若 n > 0 請輸出 1,若 n = 0 請輸出 0,若 n < 0 請輸出 -1。
輸入說明 :
輸入只有一行,其中含有一個整數。
輸出說明 :
依題目說明,請輸出 1、0、或 -1。
範例輸入 :
-9
範例輸出 :
-1
提示 :
你能只用關係運算子及算術運算子來求出解答,而不需要用到 if 指令嗎?
作者:
Alen
時間:
2010-10-30 10:21
回復
1#
buy
#include <iostream>
#include <cstdlib>
using namespace std;
int main(void){
int i;
while (cin >> i){
if (i > 0){
cout << "1" << endl;
}else if (i == 0){
cout << "0" << endl;
}else if (i < 0){
cout << "-1" << endl;
}
}
//system("pause");
return 0;
}
複製代碼
作者:
chuangjoy
時間:
2010-10-30 10:23
#include <iostream>
using namespace std;
int main(){
int a;
while(cin >> a){
if(a > 0){
cout << "1" << endl;
}else if(a == 0){
cout << "0" << endl;
}else if(a < 0){
cout << "-1" << endl;
}
}
return 0;
}
複製代碼
作者:
abc3806198
時間:
2010-11-6 09:22
#include <iostream>
using namespace std;
int main(){
int a;
while(cin >> a){
if(a > 0){
cout << "1" << endl;
}else if(a == 0){
cout << "0" << endl;
}else if(a < 0){
cout << "-1" << endl;
}
}
return 0;
}
複製代碼
作者:
b1081081
時間:
2010-11-13 10:27
#include <iostream>
using namespace std;
int main(){
int a;
cin >> a;
if(a > 0){
cout << 1 << endl;
}else if(a == 0){
cout << 0 << endl;
}else{
cout << -1 << endl;
}
return 0;
}
複製代碼
作者:
ray
時間:
2011-11-11 11:54
不能使用if指令的做法:
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
//處理負數(正數及0在這邊變成0)
int a = (n&2147483648UL)|(4294967295UL*((n&2147483648UL)/2147483648UL));
//處理正數及0(負數在這邊變成0)
int b = (((n&2147483648UL)/2147483648UL)^1)*(!!n);
//上面兩個結果相加就是答案!
cout << static_cast<int>(a+b) << endl;
//只需要一行程式的寫法:
//cout << static_cast<int>((((n&2147483648UL)|(4294967295UL*((n&2147483648UL)/2147483648UL)))+(((n&2147483648UL)/2147483648UL)^1))*(!!n)) << endl;
}
return 0;
}
作者:
ray
時間:
2011-12-3 11:02
使用C內建的常數可以讓程式更清楚且可以避免不同編譯器的int型別資料大小不同導致的錯誤:
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
//處理負數(正數及0在這邊變成0)
int a = (n&(INT_MAX+1))|((INT_MAX*2+1)*((n&(INT_MAX+1))/(INT_MAX+1)));
//處理正數及0(負數在這邊變成0)
int b = (((n&(INT_MAX+1))/(INT_MAX+1))^1)*(!!n);
//上面兩個結果相加就是答案!
cout << static_cast<int>(a+b) << endl;
//只需要一行程式的寫法:
//cout << static_cast<int>((((n&(INT_MAX+1))|((INT_MAX*2+1)*((n&(INT_MAX+1))/(INT_MAX+1))))+(((n&(INT_MAX+1))/(INT_MAX+1))^1))*(!!n)) << endl;
}
return 0;
}
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2