gpt4 book ai didi

c# - 列表<>太多循环

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:32 25 4
gpt4 key购买 nike

我的 foreach 循环次数过多,我不明白为什么。该程序应该遍历 1-100 并对每个数字的四次方求和。

using System;
using System.Collections.Generic;

public class Program
{
public static void Main()
{
int sum = 0;
string temp = "";
List<int> digits = new List<int>();

for (long i = 2; i < 100; i++)
{
temp = i.ToString();

for(int y = 0; y < temp.Length; y++)
{
digits.Add(Convert.ToInt32(temp.Substring(y,1)));

foreach(int j in digits)
{
sum += Convert.ToInt32(Math.Pow(j,4));
Console.WriteLine("foreach loop: i = {0}, y = {1}, sum = {2}, j = {3}, digits count = {4}",i,y,sum,j,digits.Count);
}
}

Console.WriteLine("i = {0}, sum = {1}", i, sum);
sum = 0;
digits.Clear();
}
}
}

下面是输出示例

foreach loop: i = 10, y = 0, sum = 1, j = 1, digits count = 1
foreach loop: i = 10, y = 1, sum = 2, j = 1, digits count = 2
foreach loop: i = 10, y = 1, sum = 2, j = 0, digits count = 2
i = 10, sum = 2
foreach loop: i = 11, y = 0, sum = 1, j = 1, digits count = 1
foreach loop: i = 11, y = 1, sum = 2, j = 1, digits count = 2
foreach loop: i = 11, y = 1, sum = 3, j = 1, digits count = 2
i = 11, sum = 3
foreach loop: i = 12, y = 0, sum = 1, j = 1, digits count = 1
foreach loop: i = 12, y = 1, sum = 2, j = 1, digits count = 2
foreach loop: i = 12, y = 1, sum = 18, j = 2, digits count = 2
i = 12, sum = 18

为什么 foreach 在一个 2 位数字上循环 3 次?循环后清空数字List

以10为例。

temp = "10";
temp.Length = 2;
second for loop (y) runs twice. 1 < 2
digits gets filled twice
foreach runs three times

最佳答案

您的 foreach 循环似乎创建了额外的循环。每次添加下一个数字时,它都会循环列表中的所有数字。

在这里你甚至不需要 foreach 循环和数字列表。

public static void Main()
{
int sum = 0;
string temp = "";

for (long i = 2; i < 100; i++)
{
temp = i.ToString();
for(int y = 0; y < temp.Length; y++)
{
int digit = Convert.ToInt32(temp.Substring(y,1));
sum += Math.Pow(digit,4);
}
Console.WriteLine("i = {0}, sum = {1}", i, sum);
sum = 0;
}
}

我不喜欢使用字符串来处理整数,下面是不在字符串和整数之间转换的解决方案

public static void Main()
{
int sum = 0;
for (long i = 2; i < 100; i++)
{
for(int temp = i; temp > 0; temp /= 10)
{
int digit = temp % 10;
sum += Math.Pow(digit,4);
}
Console.WriteLine("i = {0}, sum = {1}", i, sum);
sum = 0;
}
}

关于c# - 列表<>太多循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40845522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com