计算数字总和的最快和最容易阅读的实现是什么?
即。给定数字:17463 = 1 + 7 + 4 + 6 + 3 = 21
答案 0 :(得分:93)
您可以在不使用字符串的情况下进行算术运算:
sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
答案 1 :(得分:38)
我用
int result = 17463.ToString().Sum(c => c - '0');
它只使用一行代码。
答案 2 :(得分:16)
对于整数,Greg Hewgill有大部分答案,但忘记考虑n< 0. -3434的数字之和应该仍然是10,而不是-10。
n = Math.Abs(n);
sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
这个数字是一个浮点数,应该采用不同的方法,并且当它达到小数点时,chaowman的解决方案将完全失败。
答案 3 :(得分:11)
int num = 12346;
int sum = 0;
for (int n = num; n > 0; sum += n % 10, n /= 10) ;
答案 4 :(得分:10)
public static int SumDigits(int value)
{
int sum = 0;
while (value != 0)
{
int rem;
value = Math.DivRem(value, 10, out rem);
sum += rem;
}
return sum;
}
答案 5 :(得分:3)
我喜欢chaowman的回复,但会做一次改变
int result = 17463.ToString().Sum(c => Convert.ToInt32(c));
我甚至不确定c - '0',语法是否有效? (我认为减去两个字符应该给出一个字符?)
我认为这是最易读的版本(使用sum和lambda表达式一起使用,表明你将为每个char执行此操作)。但实际上,我认为这不会是最快的。
答案 6 :(得分:2)
我以为我只是为了完成而发布这个:
如果您需要一个递归的数字总和,例如: 17463 - > 1 + 7 + 4 + 6 + 3 = 21 - > 2 + 1 = 3
那么最好的解决方案就是
int result = input % 9;
return (result == 0 && input > 0) ? 9 : result;
答案 7 :(得分:1)
我建议最容易阅读的实现类似于:
public int sum(int number)
{
int ret = 0;
foreach (char c in Math.Abs(number).ToString())
ret += c - '0';
return ret;
}
这很有效,而且很容易阅读。 BTW:Convert.ToInt32('3')给出51而不是3. Convert.ToInt32('3' - '0')给出3。
我认为最快的实施是Greg Hewgill的算术解决方案。
答案 8 :(得分:1)
allocate( a(2), b(2), source=0.0 ) !! (1)
这是为了提供0-9之间的数字之和
答案 9 :(得分:0)
public static int SumDigits1(int n)
{
int sum = 0;
int rem;
while (n != 0)
{
n = Math.DivRem(n, 10, out rem);
sum += rem;
}
return sum;
}
public static int SumDigits2(int n)
{
int sum = 0;
int rem;
for (sum = 0; n != 0; sum += rem)
n = Math.DivRem(n, 10, out rem);
return sum;
}
public static int SumDigits3(int n)
{
int sum = 0;
while (n != 0)
{
sum += n % 10;
n /= 10;
}
return sum;
}
答案 10 :(得分:0)
如果要执行特定的操作(例如仅添加奇数/偶数),仅添加具有奇数索引/偶数索引的数字,那么以下代码最合适。在此示例中,我从输入数字中添加了奇数。
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("Please Input number");
Console.WriteLine(GetSum(Console.ReadLine()));
}
public static int GetSum(string num){
int summ = 0;
for(int i=0; i < num.Length; i++){
int currentNum;
if(int.TryParse(num[i].ToString(),out currentNum)){
if(currentNum % 2 == 1){
summ += currentNum;
}
}
}
return summ;
}
}
答案 11 :(得分:0)
int n = 17463; int sum = 0;
for (int i = n; i > 0; i = i / 10)
{
sum = sum + i % 10;
}
Console.WriteLine(sum);
Console.ReadLine();
答案 12 :(得分:0)
前段时间,我不得不找到某事的数字总和。我使用了穆罕默德·哈桑汗的代码,但它仍然将正确的数字作为重复的小数返回,即当数字总和为4时,我得到4.444444444444444等。 因此我编辑了它,每次使用此代码得到数字总和:
public class VertexCover{
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int[] row = {4, 2, 1, 5};
Vertex[] adjLists = new Vertex[row.length];
for (int i = 0; i < adjLists.length; i++) {
adjLists[i] = new Vertex(row[i], null);
}
int max = -1;
for (int i = 0; i < row.length; i++) {
for (int j = 0; j < row.length; j++) {
if (adjLists[i].value > adjLists[j].value && i < j) {
adjLists[i].adjList = new Neighbour(j, adjLists[i].adjList);
adjLists[j].adjList = new Neighbour(i, adjLists[j].adjList);
}
}
}
for (int i = 0; i < adjLists.length; i++) {
System.out.print(adjLists[i].value);
for (Neighbour neighbour = adjLists[i].adjList; neighbour != null; neighbour = neighbour.next) {
System.out.print("---->" + adjLists[neighbour.vertexNum].value);
}
System.out.println("");
}
}
}
class Vertex {
int value;
Neighbour adjList;
Vertex(int value, Neighbour neighbours) {
this.value = value;
this.adjList = neighbours;
}
}
class Neighbour {
int vertexNum;
public Neighbour next;
public Neighbour(int vnum, Neighbour next) {
this.vertexNum = vnum;
this.next = next;
}
}
其中a是你想要的数字和的数字,n是用于这个过程的double,sumD是double的数字和,sumI是整数的数字和,所以正确的数字总和。
答案 13 :(得分:0)
s
答案 14 :(得分:0)
while(ino!=0 )
{
digit=(ino%10));
printf("%d",digit);
ino=ino/10;
}
这样的数组 i / p:10 25 712 65
这不会工作你必须尝试其他逻辑,如果有人有一个请发布它添加数组元素。
答案 15 :(得分:0)
int j, k = 1234;
for(j=0;j+=k%10,k/=10;);
答案 16 :(得分:0)
最简单,最简单的方法是使用循环find sum of digits。
int sum = 0;
int n = 1234;
while(n > 0)
{
sum += n%10;
n /= 10;
}
答案 17 :(得分:-2)
惊讶没有人考虑过Substring方法。不知道它是否更有效率。对于任何知道如何使用此方法的人来说,对于这样的情况它非常直观。
string number = "17463";
int sum = 0;
String singleDigit = "";
for (int i = 0; i < number.Length; i++)
{
singleDigit = number.Substring(i, 1);
sum = sum + int.Parse(singleDigit);
}
Console.WriteLine(sum);
Console.ReadLine();
答案 18 :(得分:-2)
static int SumOfDigits(int num)
{
string stringNum = num.ToString();
int sum = 0;
for (int i = 0; i < stringNum.Length; i++)
{
sum+= int.Parse(Convert.ToString(stringNum[i]));
}
return sum;
}