Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对整数的各个数字求和?_C#_Arrays - Fatal编程技术网

C# 如何对整数的各个数字求和?

C# 如何对整数的各个数字求和?,c#,arrays,C#,Arrays,我有一个整数值(例如:723),我想把这个整数值中的所有值相加,直到得到一个值 ex: 7 + 2 + 3 = 12 1 + 2 = 3 我是C#的新手。请给我一个很好的解释你的答案:) %10每次给出最后一位数字,因此我们将其添加到累加器中/=10执行整数除法,每次基本上都删除最后一位。然后我们重复,直到我们有一个足够小的数字。嗯,我想到的一个快速函数是 int number = 723; double sum = number.ToString().Sum(s =>

我有一个整数值(例如:723),我想把这个整数值中的所有值相加,直到得到一个值

ex: 7 + 2 + 3 = 12
    1 + 2     = 3
我是C#的新手。请给我一个很好的解释你的答案:)


%10
每次给出最后一位数字,因此我们将其添加到累加器中
/=10
执行整数除法,每次基本上都删除最后一位。然后我们重复,直到我们有一个足够小的数字。

嗯,我想到的一个快速函数是

int number = 723;
double sum = number.ToString().Sum(s => Char.GetNumericValue(s));
string numString = number.ToString();
以及使用LINQ计算所有和

double [] allSums = Enumerable.Range(1, numString.Length).Select(i =>numString.Substring(0, i).Sum(s => Char.GetNumericValue(s))).ToArray();
递归使用Mod(%):

int AddUp(int number){
    if(number<10) return number;
    return AddUp(number/10) + number % 10;
}
int AddUp(整数){

如果(数字虽然从底部拉出数字并除以10的解决方案是正确的,并且清楚地实现了所需的功能,但是如果你知道一个技巧,你可以用更少的代码来完成这项任务。如果你按照你所描述的方法将数字相加,直到得到一个单位数,当你除以原始数字时,你得到的结果就是余数按九进行编号

试试看。
789-->7+8+9=24-->2+4-->6和789=87*9+6

如果x是一个正整数,你可以通过执行
x%9
来解决你的问题。如果你得到零,那么实际结果是九,否则你会得到数字的重复和

这个技巧引出了一种检查算术的方法,称为“排除9”。假设你有一个和,你想检查它是否正确:

  3147 
+ 5926
  ----
  9063  
对吗?在每一行上玩你的把戏:

  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
现在对求和进行操作。
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
现在校验和是一样的。
6+4=10-->1+0=1

这被称为“排除9”,因为你可以忽略总和中的任何9,因为它们没有任何区别:

9123-->9+1+2+3=15-->1+5=6
,与刚才的
1+2+3
相同。您可以“排除”这九个选项,但仍然得到相同的结果

现在,你能证明当除以9时,数字的和就是余数吗?你能证明舍弃9对和有效吗?你能推导并证明一个类似的规则来检查产品的错误吗

下面的扰流板

让我们定义一个关系x≡这意味着“x和c是非负整数,存在一个非负整数n,使得x=9n+c”。也就是说,x和c是“模九全等的”。明白了吗

首先要证明的是:如果x≡c和y≡然后是x+y≡c+d

这很简单。根据关系的定义,存在非负整数m和n,x=9n+c,y=9m+d。我们必须证明存在一个非负整数p,x+y=9p+c+d。整数p显然是m+n。因为存在这样一个整数,关系成立

第二件要证明的事情:如果x≡c和y≡然后是xy≡光盘

同样,我们必须证明存在一个整数p,使得xy=9p+cd。通过对第一定理的类似证明,p=9nm+mc+nd起作用,所以关系成立

要证明的第三件事:10n≡1表示任何非负整数n

归纳法很容易证明:

  • 显然是100≡一,
  • 显然是101≡一,
  • 做出归纳假设:假设10k≡1,其中k>0
  • 10k+1=10110k
  • 10110k≡(1) (1)通过我们的第二次证明
  • 因此,如果10k≡1然后是10k+1≡一,
  • 因此通过感应10n≡1表示所有非负整数n
从这三个定理可以看出

a(102)+b(101)+c(100)≡ a+b+c

我们已经证明了十进制记数法中的一个数字与它的数字之和是“模九全等的”


“排除9”作为算术校验和工作的事实现在从我们的第一个证明立即开始。

我得到的答案(i)是0…我如何显示最终答案?@megazoid你刷新了吗?
acc
i
都应该以3int i=723;int acc;do{acc=0;while(i>0)结尾{acc+=i%10;i/=10;}i=acc;}而(acc>=10);int val=i;这行吗???@megazoid-是的;你得到了什么?我得到了3。@Marc,div+sub+mul应该比div+mod+1快。他需要一个while循环,当它只有一个数字/当总和与输入相同时终止,以便执行他正在寻找的数字算法。但这是个好主意:)由于不必要的
ToString()
s和
Convert
s,效率低下。即使它看起来很简单,我也不会使用它。也许更好的标题是“如何将整数拆分为数字”让
rem(x,y)
x
除以
y
的整数除法的余数。我们想证明
rem(n,9)+rem(m,9)=rem(n+m,9)
对于所有整数
n
m
。我们知道
rem(x,y)=x-y*floor(x/y)
。使用这个我们得到
n-9*floor(n/9)+m-9*floor(m/9)=n+m-9*floor((n+m)/9)
。从两边减去
n+m
,然后乘以-1/9,我们剩下
floor(n/9)+m+m=floor(n/9)
。使用floor函数的一些属性,我们知道
floor(n/9+m/9)=floor(n/9)+floor(m/9)
floor(n/9+m/9)=floor(n/9)+floor(m/9)+1
。现在怎么办?我差一点就到了……但我的底子不及格。我必须重新阅读TAOCP的第一部分。@Martinho:我觉得用十进制加法来证明这一点更简单。例如,5+9:一位减少1,十位增加1。十位可能会减少9,而百位则会减少增加1(等)。@Martinho:
rem(n,9)+rem(m,9)=rem(n+m,9)
不是真的。尝试n=m=5。正确的是
rem(rem(n,9)+rem(m,9)=rem(n+m,9)
int a=723;

if(a % 9 ==0){
   result = 9;
}
else if(a % 9 !=0){
   result = a % 9;
}
int a=723;

if(a % 9 ==0){
   result = 9;
}
else if(a % 9 !=0){
   result = a % 9;
}