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!
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!
Đ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 .. !!
không di động, nhưng creepily nghệ thuật –
Nếu bạn thực hiện bitfield 'unsigned' thay vì' int', nó trở nên hoàn toàn di động! – caf
có! Cảm ơn đã chỉ, tôi đã làm phiên bản ..! – SuperSaiyan
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.
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
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 –
@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ỳ". –
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ệ.
switch (n) {
case 0:
case 2:
case 4:
...
return Even;
}
return Odd;
ha, hãy xem những gì chúng tôi chưa từng nghĩ đến! – jrharshath
Tại sao điều này lại được bình chọn? –
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) –
... 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.
Đâ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ý).
Đ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ó)? –
Đó là trái như một bài tập cho người đọc. – benzado
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;
}
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?
#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");
}
#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;
}
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
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? –