首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中一个数的泛型根

C中一个数的泛型根
EN

Stack Overflow用户
提问于 2013-05-27 17:46:45
回答 6查看 5.6K关注 0票数 12

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

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

因此,456的泛根=6

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

代码语言:javascript
复制
#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;
}

我不能理解三元运算符是如何在这里工作的!?它是如何计算一个数的泛型根的

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-27 17:50:14

N模数9返回其根或0,在这种情况下,根是9。

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

所以(x=n%9)?x:9的意思是,如果n mod9是0,那么赋值9。

您也可以在没有三元运算符的情况下实现这一点:

代码语言:javascript
复制
x = 1+((n-1)%9)

模数9的技巧被称为。

票数 12
EN

Stack Overflow用户

发布于 2013-05-27 17:53:01

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

所以现在让我们解开三元组:

代码语言:javascript
复制
 x = n % 9;
 y = ((x != 0) ? x : 9);

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

maths

这也很有趣:但我不会深入讨论--诀窍是证明10的所有幂都与1/ 9同余。

票数 7
EN

Stack Overflow用户

发布于 2013-05-27 19:24:17

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

代码语言:javascript
复制
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)

从这一点来看,

代码语言:javascript
复制
456 mod 9 ==((4 mod 9)*(100 mod 9) + 
             (5 mod 9)*(10 mod 9) +
             (6 mod 9)*(1 mod 9)) mod 9

将公式(2)替换为权重(1mod9),(10mod9),(10^n mod9),可以得到每个数字只对中间和贡献自己的权重。该和(模9)可以迭代地计算,直到只有一个数字,并且数字0被单独处理。这也是代码片段中三元操作的用途。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16770465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档