2009-12-26 56 views
8

Gần đây tôi đã được yêu cầu viết chương trình, xác định xem một số thậm chí là số lẻ hay không mà không sử dụng toán tử bit/toán học nào!Tìm số chẵn/lẻ mà không sử dụng toán tử/bitwise

Bất kỳ ý tưởng nào?

Cảm ơn!

+2

Bạn đang hy vọng chúng tôi sẽ giúp bạn với cuộc phỏng vấn của bạn? –

Trả lời

35

Điều này có thể được thực hiện bằng một lĩnh vực 1 chút giống như trong đoạn code dưới đây:

#include<iostream> 

struct OddEven{ 
    unsigned a : 1; 
}; 
int main(){ 
    int num; 
    std::cout<<"Enter the number: "; 
    std::cin>>num; 
    OddEven obj; 
    obj.a = num; 
    if (obj.a==0) 
     cout<<"Even!"; 
    else 
     cout<<"Odd!"; 
    return 0; 
} 

Kể từ obj.a đó là một giá trị một lĩnh vực, chỉ LSB sẽ được tổ chức tại đây! Và bạn có thể kiểm tra điều đó cho câu trả lời của bạn .. 0 -> Thậm chí nếu không Odd .. !!

+2

không di động, nhưng creepily nghệ thuật –

+7

Nếu bạn thực hiện bitfield 'unsigned' thay vì' int', nó trở nên hoàn toàn di động! – caf

+0

có! Cảm ơn đã chỉ, tôi đã làm phiên bản ..! – SuperSaiyan

5

Bạn có thể chuyển đổi số thành một chuỗi và kiểm tra xem các chữ số cuối cùng là 1,3,5,7 hoặc 9.

+0

Quy trình chuyển đổi chuỗi có thể sử dụng toán tử mô-đun (toán học) bên trong để trích xuất các chữ số của số. – Amnon

+0

có thể thực hiện được! Nhưng nó rất nhiều không hiệu quả để chuyển đổi thành chuỗi và sau đó kiểm tra –

+4

@Amnon: các trường đơn bit được đề xuất ở nơi khác sử dụng các toán tử bitwise trong nội bộ.Nó chỉ là vấn đề làm thế nào ngu ngốc bạn nghĩ rằng câu đố phỏng vấn này là: "rất" hoặc "cực kỳ". –

2

Tôi không chắc chắn nếu == được coi là một nhà điều hành toán học, nếu không có , sau đó chuyển đổi số thành chuỗi và kiểm tra xem ký tự cuối cùng bằng 0, 2, 4, 6 hoặc 8.

Chỉnh sửa: == có vẻ được coi là toán tử so sánh/Toán tử quan hệ.

6
switch (n) { 
    case 0: 
    case 2: 
    case 4: 
    ... 
     return Even; 
} 
return Odd; 
+0

ha, hãy xem những gì chúng tôi chưa từng nghĩ đến! – jrharshath

+0

Tại sao điều này lại được bình chọn? –

+0

Tại sao các downvotes? Nếu không có các toán tử quan hệ và bitwise, tôi không thấy gì tốt hơn. (+1) –

1

... Tại sao bạn làm điều này?

Điều này chỉ có thể xảy ra nếu bạn đang cố tránh viết +, -, /, *, &, |^hoặc%.

Chuyển đổi và chuyển đổi chuỗi có bảng tra cứu tiềm ẩn và do đó bổ sung ngầm định.

Các hình sau đây để tránh nó:

//C/C++ code (psuedo'd up) 
struct BitNum 
{ 
    unsigned int num : 1; 
}; 

... 
BitNum a; 
a.num = number_to_be_tested; 
if(a.num == 0) return EVEN; 

return ODD; 
... 

Nhưng nó ngầm sử dụng & để có được chỉ là chút.

1

Đây là một thử thách lạ.

Bạn có thể sử dụng số này làm bù đắp địa chỉ bộ nhớ cho lệnh tải. Nếu kiến ​​trúc của bạn yêu cầu quyền truy cập bộ nhớ được căn chỉnh trên các khoảng bù hai byte, thì bộ vi xử lý sẽ cho phép tải từ các địa chỉ thậm chí và ném một ngoại lệ cho một địa chỉ lẻ (tải chưa được ký).

+0

Điều gì sẽ xảy ra nếu có một số địa chỉ mà nó ném ngoại lệ ví dụ, các giá trị nằm ngoài phạm vi của bản đồ bộ nhớ của nó)? –

+0

Đó là trái như một bài tập cho người đọc. – benzado

14

giải pháp ngắn gọn nhất để vấn đề của bạn:

#include <iostream> 
#include <string> 
#include <bitset> 

int main() { 
    std::string const type[] = {"even", "odd"}; 
    int n; 
    std::cout << "Enter an integer." << std::endl; 
    std::cin >> n; 
    std::cout << type[(std::bitset<1>(std::abs(n))[0])] << std::endl; 
} 
0

Làm thế nào về một Bitwise đơn giản hay?

bool is_odd(const int &number){ 
return (number == (number | 1)); 
} 
bool is_even(const int &number){ 
return (number != (number | 1)); 
} 

(chỉnh sửa) hmm ... Tôi cho rằng tôi nên đọc tiêu đề eh?

0
#include <stdio.h> 
#include <math.h> 

void main() 
{ 
    int num; 
    scanf("%d",&num); 

    if(fmod(num,2)) 
    { 
     printf("number is odd"); 
    } 
    else 
     printf("number is even"); 
} 
0
#include<stdio.h> 
int main() 
{ 
    int num,res; 
    printf("\nEnter the number="); 
    scanf("%d",&num); 
    res=num&1; 
    if(res==0) 
    printf("Number is even"); 
    else 
    printf("Number is odd"); 
    return 0; 
} 
+3

Câu hỏi cho biết "không sử dụng toán tử bitwise". 'num & 1' chắc chắn là một toán tử bitwise. – Flexo

Các vấn đề liên quan