2013-05-27 29 views
12

Gốc chung của một số được định nghĩa là tổng các chữ số của một số cho đến khi chúng ta nhận được một chữ số duy nhất. Ví dụ:Gốc chung của một số trong c

gốc Generic 456: 4 + 5 + 6 = 15 kể từ khi 15 là hai số chữ số nên ta 1 + 5 = 6

Vì vậy, gốc chung của 456 = 6

tôi giải quyết vấn đề này bằng cách đệ quy thêm các chữ số của số cho đến khi một số chữ số thu được và chương trình làm việc tốt. Tôi đã tìm kiếm trên web và tìm thấy một giải pháp rất nhỏ cho nó mà tôi không thể hiểu được:

#include<stdio.h> 
int main() 
{ int n,x; 
    printf("Enter no"); 
    scanf("%d",&n); 
    printf("Generic root: %d",(x=n%9)?x:9); 
    return 0; 
} 

Tôi không thể hiểu cách toán tử ternary hoạt động ở đây !? Làm thế nào là nó tính toán gốc Generic một số

+3

Hoặc nó có thể được định nghĩa là n mod 9. (nhà điều hành ternary sửa chữa các trường hợp khi n% 9 == 0) –

+1

nghĩa là (x = n% 9)! = 0? x: 9 – Exceptyon

+2

Tôi nghĩ rằng OP đã tìm ra những gì '(x = n% 9)? x: 9' có nghĩa là trong C. OP có lẽ nhìn như thế nào dòng này là tính toán gốc, nói cách khác OP là tìm kiếm bằng chứng định lý này. – taskinoor

Trả lời

11

Một số n mô đun 9 lợi nhuận hoặc gốc hoặc 0 của nó, trong trường hợp này là gốc 9.

  1. Tính n% 9 để có được những gốc
  2. Nếu kết quả là 0, sau đó vào thư mục gốc là 9

Vì vậy (x=n%9)?x:9 có nghĩa rằng nếu n mod 9 là zero, chuyển nhượng 9.

Bạn cũng có thể đạt được điều này mà không có sự điều hành ternary:

x = 1+((n-1)%9) 

Các mô đun 9 lừa được gọi là congruence formula.

+2

Đó là một thủ thuật mà chúng tôi đã nghĩ trong trường tiểu học để biết nếu một số có thể chia hết cho 9. – UmNyobe

+3

BTW công thức '1 + ((n-1)% 9)' đưa ra câu trả lời đúng ngay cả đối với 'n = 0', trong khi hack (x = n% 9)? x: 9' không chính xác trong trường hợp đó – anatolyg

7

Đó là một thủ thuật toán học: "gốc chung" của một số thập phân giống với số nguyên bản gốc modulo 9. Vấn đề duy nhất là nếu số thực sự là bội số của 9, biểu thức C n % 9 sẽ đánh giá số không.

Vì vậy, bây giờ hãy giải nén các ternary:

x = n % 9; 
y = ((x != 0) ? x : 9); 

Vì vậy, nếu x là zero, chúng tôi nhận y=9, nếu không chúng tôi nhận y=x. Kết hợp với thủ thuật toán học ban đầu, đây là những gì chúng tôi muốn.

Các toán:

này là thú vị quá: nhưng tôi sẽ không đi vào hay - Bí quyết là để chứng minh rằng tất cả các quyền hạn của 10 là đồng dư với 1 modulo 9.

+0

Giải thích cho "mẹo" này là gì? – puffadder

+1

Về cơ bản, kể từ 10 ** n == 1 mod 9, thì mỗi chữ số trong một số thập phân chỉ đóng góp giá trị của riêng nó cho phiên bản mod-9. –

+1

Đối với đầu vào là '0', cũng cần có trường hợp đặc biệt, nếu không kết quả là sai. – glglgl

3

Các giải thích về các trick trong ý nghĩa toán học là trong các thuộc tính của số học modula:

a number, say 456 == 4*100 + 5*10 + 6 

OTOH (a+b) mod N == ((a mod N) + (b mod N)) mod N (1) 
AND (a*b) mod N == ((a mod N) * (b mod N)) mod N (2) 

Từ đó sau, mà

456 mod 9 ==((4 mod 9)*(100 mod 9) + 
      (5 mod 9)*(10 mod 9) + 
      (6 mod 9)*(1 mod 9)) mod 9 

Thay thế công thức (2) thành trọng số (1 mod 9), (10 mod 9), (10^n mod 9), một được rằng mỗi chữ số chỉ đóng góp trọng số riêng của nó cho tổng trung gian. Tổng số đó (modulo 9) có thể trả về được đánh giá lặp lại cho đến khi chỉ có một chữ số và chữ số 0 được xử lý riêng.Đó cũng là những gì mà hoạt động thứ ba trong đoạn mã được sử dụng.

0

Các tiêu chí phân chia cho bộ phận với 9 là tổng của các chữ số phải chia hết cho 9. Việc làm này một cách đệ quy, bạn sẽ có được kết quả là một số chia hết cho 9 có một gốc chung của 9.

Bằng thực hiện thao tác modulo bạn tính toán khoảng cách bạn đến từ bội số của 9, khoảng cách này cũng là gốc chung của số. Nếu bạn lấy một mảnh giấy và viết các gốc chung theo thứ tự, bạn sẽ thấy rằng chúng tăng lên 1 mỗi số, và sau 9 có 1.

Ngoài ra còn có trường hợp đặc biệt mà bạn phải cân nhắc, 0. Ai có thể chia hết cho 9 nhưng không có gốc chung là 9 (đó là số duy nhất có gốc chung là 0).

-2

Trong một cách dễ dàng lừa toán học là:

15 % 9 = 6-- 1+5=6 
14 % 9 = 5-- 1+4=5 
18 % 9 = 0-- 1+8=9 

Trong khái niệm này nó hoạt động

if x != 0 it return x value 
if x == 9 it returns the value 9 
printf("Generic root: %d",(x=num%9)?x:9); 
0

Guys Tôi đã là một giải pháp đang tìm (x = n% 9) x: 9 khó để hiểu. Kiểm tra các điều kiện nếu cẩn thận. LƯU Ý: số lượng chúng tôi nhập phải lớn hơn 10.

int main() 
{ 

int n; 

printf("Enter number..."); 
scanf("%d",&n); 
if(n%9==9) 
    { 
    printf("The generic root of the number is : 9"); 

    } 
else if(n%9!=0) 
{ 
    printf("The generic root of the number is : %d",n%9); 
} 
return 0; 
} 
Các vấn đề liên quan