C# 一个数字的数字总和,如果总和等于 9
C# Sum of digits of a number if the sum equals 9
我要将所有3位数字的和为9的数字写入控制台。
这是我到目前为止想出来的,但没有用:
class Program
{
static void Main(string[] args)
{
int sum = 0;
for (int n = 100; n < 1000; n++)
{
while (n <1000)
{
sum += n % 10;
n /= 10;
if (sum == 9)
Console.WriteLine(sum);
}
}
}
}
我想你正在寻找这个:
class Program
{
static void Main(string[] args)
{
for (int n = 100; n < 1000; n++)
{
int sum = 0;
int num = n;
while (num != 0)
{
int r = num % 10;
sum += r;
num /= 10;
}
if (sum == 9)
Console.WriteLine(n);//.....Number whose all digit sum ==9
}
}
}
我会使用三个循环,每个数字一个:
for (int i1 = 1; i1 < 10; i1++)
for (int i2 = 0; i2 < 10; i2++)
for (int i3 = 0; i3 < 10; i3++)
{
if (i1 + i2 + i3 == 9)
Console.WriteLine("{0}{1}{2}", i1, i2, i3);
}
您没有在每次循环迭代后重置总和。在每次迭代开始时,总和应该等于零。另外,while 循环是错误的。试试这个:
for(int n=100;n<1000;n++)
{
sum=0;
int i = n;
while(i!=0) {
sum += i % 10;
i /= 10;
}
if (sum == 9)
Console.WriteLine("Number {0} has digit sum of {1}", n, sum);
}
为什么这么复杂?
for (int n = 100; n < 1000; n++)
{
var s1 = n/100 % 10;
var s2 = n/10 % 10;
var s3 = n/1 % 10;
var sum = s1+s2+s3;
if (sum == 9)
Console.WriteLine(n);
}
对于不喜欢简单方法的人:D
Enumerable.Range(0, 1000).Select(x => x.ToString())
.Where(x => x.Length == 3).Select(x => new {x, sum=x.ToCharArray()
.Select(c=>int.Parse(c.ToString())).Sum()}).Where(x=>x.sum == 9)
.Select(x=>x.x).ToList().ForEach(Console.WriteLine);
Oki,尝试创建非通用但最快的解决方案。
for (var i = 1; i <= 10; i++)
for (var j = 0; j < 10; j++)
{
if ((i>1 && j == 0) || i < j)
{
Console.WriteLine(i * 90 + j * 9);
}
}
我要将所有3位数字的和为9的数字写入控制台。 这是我到目前为止想出来的,但没有用:
class Program
{
static void Main(string[] args)
{
int sum = 0;
for (int n = 100; n < 1000; n++)
{
while (n <1000)
{
sum += n % 10;
n /= 10;
if (sum == 9)
Console.WriteLine(sum);
}
}
}
}
我想你正在寻找这个:
class Program
{
static void Main(string[] args)
{
for (int n = 100; n < 1000; n++)
{
int sum = 0;
int num = n;
while (num != 0)
{
int r = num % 10;
sum += r;
num /= 10;
}
if (sum == 9)
Console.WriteLine(n);//.....Number whose all digit sum ==9
}
}
}
我会使用三个循环,每个数字一个:
for (int i1 = 1; i1 < 10; i1++)
for (int i2 = 0; i2 < 10; i2++)
for (int i3 = 0; i3 < 10; i3++)
{
if (i1 + i2 + i3 == 9)
Console.WriteLine("{0}{1}{2}", i1, i2, i3);
}
您没有在每次循环迭代后重置总和。在每次迭代开始时,总和应该等于零。另外,while 循环是错误的。试试这个:
for(int n=100;n<1000;n++)
{
sum=0;
int i = n;
while(i!=0) {
sum += i % 10;
i /= 10;
}
if (sum == 9)
Console.WriteLine("Number {0} has digit sum of {1}", n, sum);
}
为什么这么复杂?
for (int n = 100; n < 1000; n++)
{
var s1 = n/100 % 10;
var s2 = n/10 % 10;
var s3 = n/1 % 10;
var sum = s1+s2+s3;
if (sum == 9)
Console.WriteLine(n);
}
对于不喜欢简单方法的人:D
Enumerable.Range(0, 1000).Select(x => x.ToString())
.Where(x => x.Length == 3).Select(x => new {x, sum=x.ToCharArray()
.Select(c=>int.Parse(c.ToString())).Sum()}).Where(x=>x.sum == 9)
.Select(x=>x.x).ToList().ForEach(Console.WriteLine);
Oki,尝试创建非通用但最快的解决方案。
for (var i = 1; i <= 10; i++)
for (var j = 0; j < 10; j++)
{
if ((i>1 && j == 0) || i < j)
{
Console.WriteLine(i * 90 + j * 9);
}
}