我有一个整数值(例如:723),我想将这个整数中的所有值相加,直到得到一个值.
ex: 7 + 2 + 3 = 12
1 + 2 = 3
Run Code Online (Sandbox Code Playgroud)
我是C#的新手.请给我一个很好的解释你的答案:)
Eri*_*ert 40
虽然在这里你十拉出底部数字,鸿沟的解决方案是正确的,清晰地实现所需的功能,你可以做这个任务到目前为止,如果你知道一招更少的代码.如果您按照描述对数字求和,直到得到一位数字,则得到的结果是将原始数字除以9时的余数.
试试吧. 789 --> 7 + 8 + 9 = 24 --> 2 + 4 --> 6, and 789 = 87 * 9 + 6
因此,只要x % 9x是正整数,就可以解决问题.如果你得到零,那么实际结果是九,否则你得到重复的数字总和.
这个技巧导致了一种检查称为"抛出9"的算术的方法.假设您有一笔金额,并且您想检查它是否正确:
3147
+ 5926
----
9063
Run Code Online (Sandbox Code Playgroud)
那是对的吗?在每一行上做你的伎俩:
3147 --> 3 + 1 + 4 + 7 = 15 --> 1 + 5 = 6
+ 5926 --> 5 + 9 + 2 + 6 = 22 --> 2 + 2 = 4
----
9063 --> 9 + 0 + 6 + 3 = 18 --> 1 + 8 = 9
Run Code Online (Sandbox Code Playgroud)
现在就总结一下.6 + 4 = 10 --> 1 + 0 = 1 如果你做了正确的原始数学,那么两个校验和应该相等,但它们不是,第一个是1,第二个是9.当然,在十位有一个错误.正确的总和是
3147 --> 3 + 1 + 4 + 7 = 15 --> 1 + 5 = 6
+ 5926 --> 5 + 9 + 2 + 6 = 22 --> 2 + 2 = 4
----
9073 --> 9 + 0 + 7 + 3 = 19 --> 1 + 9 = 10 --> 1 + 0 = 1
Run Code Online (Sandbox Code Playgroud)
现在校验和是一样的. 6 + 4 = 10 --> 1 + 0 = 1
它被称为"抛出九",因为你可以忽略总和中的任何九,因为它们没有任何区别:
9123 --> 9 + 1 + 2 + 3 = 15 --> 1 + 5 = 6,这和刚刚一样1 + 2 + 3.你可以"赶走"九个,但仍然得到相同的结果.
现在,你可以证明数字的总和是除以9时的余数吗?你能证明投出九分为总和吗?您是否可以推断并证明检查错误产品的类似规则?
下面的掠夺者
让我们定义关系x≡c,这意味着"x和c是非负整数,并且存在非负整数n,使得x = 9n + c".也就是说,x和c是"一致的模九".得到它了?
首先要证明:如果x≡c和y≡d则x +y≡c+ d.
这很简单.根据该关系的定义,存在非负整数m和n,使得x = 9n + c和y = 9m + d.我们必须证明存在非负整数p,使得x + y = 9p + c + d.整数p显然是m + n.由于存在这样的整数,因此该关系成立.
第二件事要证明:如果x≡c和y≡d那么xy≡cd.
同样,我们必须证明存在一个整数p,使得xy = 9p + cd.通过第一定理的类似证明,p = 9nm + mc + nd起作用,因此该关系成立.
第三件事证明:10 ñ ≡1任何非负整数n.
通过归纳证明很容易:
从这三个定理你现在可以看到
a(10 2)+ b(10 1)+ c(10 0)≡a+ b + c
所以我们已经证明了十进制表示法中的数字是"全等的模式九"到它的数字之和.
现在,从我们的第一个证据中可以看出,"驱逐9"作为算术校验和.
Mar*_*ell 16
int i = 723;
int acc;
do {
acc = 0;
while (i > 0)
{
acc += i % 10;
i /= 10;
}
i = acc;
} while(acc>=10);
Run Code Online (Sandbox Code Playgroud)
% 10每次都给出最后的数字,所以我们将它添加到累加器中./= 10执行整数除法,基本上每次删除最后一位数.然后我们重复,直到我们有足够小的数字.
xan*_*ndy 12
递归使用Mod(%):
int AddUp(int number){
if(number<10) return number;
return AddUp(number/10) + number % 10;
}
Run Code Online (Sandbox Code Playgroud)