12

一个数字的通用根被定义为一个数字的数字之和,直到我们得到一个数字。例如:

456 的一般根:4 + 5 + 6 = 15 因为 15 是两位数所以 1 + 5 = 6

所以,456的通用根= 6

我通过递归地添加数字的数字来解决这个问题,直到获得一个数字并且程序运行良好。我在网上搜索并找到了一个我无法理解的非常小的解决方案:

#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;
}

我无法理解三元运算符是如何在这里工作的!?它如何计算数字的通用根

4

6 回答 6

12

n模 9 返回其根或 0,在这种情况下,根为 9。

  1. 计算 n % 9 得到根
  2. 如果结果为 0,则根为 9

所以(x=n%9)?x:9意味着如果 n mod 9 为零,则分配 9。

您也可以在没有三元运算符的情况下实现此目的:

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

模数 9 技巧称为同余公式

于 2013-05-27T09:50:14.053 回答
7

这是一个数学技巧:十进制数的“通用根”与原始数字本身模 9 相同。唯一的问题是,如果该数字实际上是 9 的倍数,则 C 表达式n % 9将计算为零。

所以现在让我们解压三元:

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

因此,如果x为零,我们得到y=9,否则我们得到y=x。结合原来的数学技巧,这就是我们想要的。

数学

这也很有趣:但我不会深入讨论——诀窍是证明 10 的所有幂都与 1 模 9 相等。

于 2013-05-27T09:53:00.927 回答
3

数学意义上的技巧的解释是在模算术的属性中:

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)

由此可知,

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

将公式 (2) 代入权重 (1 mod 9)、(10 mod 9)、(10^n mod 9),可以得出每个数字仅将其自身的权重贡献给中间和。作为回报,该总和(模 9)可以迭代地评估,直到只有一个数字并且数字 0 被单独处理。这也是代码片段中的三元运算的用途。

于 2013-05-27T11:24:16.970 回答
0

与 9 相除的除法标准是数字之和必须能被 9 整除。递归执行此操作,您会得到可被 9 整除的数字的通用根为 9。

通过进行模运算,您可以计算距离 9 的倍数有多远,这个距离也是该数字的通用根。如果你拿一张纸,按顺序写出通用根,你会看到它们每个数字都加 1,9 之后是 1。

您还必须考虑一个特殊情况,0。谁可以被 9 整除,但没有 9 的通用根(它是唯一具有通用根 0 的数字)。

于 2013-05-27T14:01:29.597 回答
0

伙计们,我有一个解决方案,他们发现 (x=n%9)?x:9 难以理解。仔细检查 if 条件。注意:我们输入的数字必须大于 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; 
}
于 2016-10-05T10:32:36.403 回答
-2

在很容易的数学技巧是:

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

在这个概念中它有效

if x != 0 it return x value
if x == 9 it returns the value 9 
printf("Generic root: %d",(x=num%9)?x:9);
于 2016-07-19T06:54:36.557 回答