如何使用 C# 循环计算大笔付款
How to count down large payments with a loop with c#
我正在尝试使用循环语句进行自己的国债倒计时。我对编程还是很陌生,所以我很难弄清楚如何制作这个循环。我想显示如果每天支付 100,000,000 美元,还清债务需要多长时间。我想显示天数和年数,但我现在的首要任务是循环。到目前为止我有这个
namespace Count_Down_The_National_Debt
{
class Program
{
static void Main(string[] args)
{
//step 1
// use 19.9 trillion dollars
long national_debt = 19900000000000;
// keep track of how many days and it years it takes to pay off the US National Debt
int day = 0, years = 0;
我回顾了我制作的一个使用循环的更简单的程序,但它是用于向上计数而不是向下计数。这是我根据以前的程序做的;
int j = 0;
Console.WriteLine("By 100 Millions ");
while (national_debt > 0)
{
Console.WriteLine(j.ToString());
j = j - 100000000;
}
但是,它只是无限循环运行,直到我关闭我的程序。我是否需要某种形式的休息,或者我是否需要完全重写我的循环?
对于初学者来说,我实际上会使用一个 for 循环,它可以递增和递减。对于递增 for 循环,C# 语法如下所示:
for (int i = 0; i < N; i++)
{
// Put your logic here
}
但是,递减循环有点不同。使用您的示例:
for(long d = national_debt; d > 0; d--)
{
// Put your logic here
}
希望这可以帮助您理解,并可能引导您解决问题。
一般来说,任何类型的循环都不是解决这个问题的有效计算方法,因为它可以用稍后演示的算术来解决。我假设您尝试按照您在问题中建议的 while 循环来解决它,这纯粹是 while 循环中的学习练习。话虽如此,您将需要您的循环条件取决于您正在修改的值。在您的情况下,您可以使其依赖于 j,并将 j 初始化为 national_debt 的起始值。这是一个使用更冗长的变量名称的更完整的示例:
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
long initial_national_debt = 19900000000000;
long national_debt = initial_national_debt;
long payment_size = 100000000;
while (national_debt > 0)
{
Console.WriteLine(national_debt);
national_debt -= payment_size;
}
}
}
}
@maccettura 提出的答案未能正确计算还清债务所需的天数。例如,如果债务为 100 美元,付款增量为 200 美元,则需要一天才能还清债务。然而,截断整数除法表示 100 / 200 等于零。在这种情况下,显然不需要零天就可以还清债务。
正如我之前提示的,这个问题可以直接解决。请参阅以下代码段:
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
long national_debt = 19900000000000;
long payment_size = 100000000;
long total_days_to_pay = national_debt / payment_size;
// if the debt is not evenly divisible by the payment size, then there is one partial day of debt
if (national_debt % payment_size != 0)
total_days_to_pay++;
Console.WriteLine("It takes " + total_days_to_pay + " total days to pay off the national debt.");
Console.WriteLine("That's " + total_days_to_pay / 365 + " years and " + total_days_to_pay % 365 + " days !");
}
}
}
我认为接受的答案不是很好。依赖于 incrementing/decrementing 数字的 while 循环通常意味着您不应使用 while 循环。处理这个问题的更好方法是使用 for
循环(并将其放在一个方法中,以便它可以重新使用)
private static void CalculatePayDownDays(long payPerDay, long nationalDebt)
{
long days = (long)Math.Ceiling((decimal)nationalDebt / payPerDay);
for (long i = 1; i < days + 1; i++)
{
nationalDebt -= payPerDay;
Console.WriteLine("Day {0}, New Balance: {1:c}", i, nationalDebt);
}
}
Fiddle here
编辑
对于我们这些迂腐的人,我稍微修改了方法
我正在尝试使用循环语句进行自己的国债倒计时。我对编程还是很陌生,所以我很难弄清楚如何制作这个循环。我想显示如果每天支付 100,000,000 美元,还清债务需要多长时间。我想显示天数和年数,但我现在的首要任务是循环。到目前为止我有这个
namespace Count_Down_The_National_Debt
{
class Program
{
static void Main(string[] args)
{
//step 1
// use 19.9 trillion dollars
long national_debt = 19900000000000;
// keep track of how many days and it years it takes to pay off the US National Debt
int day = 0, years = 0;
我回顾了我制作的一个使用循环的更简单的程序,但它是用于向上计数而不是向下计数。这是我根据以前的程序做的;
int j = 0;
Console.WriteLine("By 100 Millions ");
while (national_debt > 0)
{
Console.WriteLine(j.ToString());
j = j - 100000000;
}
但是,它只是无限循环运行,直到我关闭我的程序。我是否需要某种形式的休息,或者我是否需要完全重写我的循环?
对于初学者来说,我实际上会使用一个 for 循环,它可以递增和递减。对于递增 for 循环,C# 语法如下所示:
for (int i = 0; i < N; i++)
{
// Put your logic here
}
但是,递减循环有点不同。使用您的示例:
for(long d = national_debt; d > 0; d--)
{
// Put your logic here
}
希望这可以帮助您理解,并可能引导您解决问题。
一般来说,任何类型的循环都不是解决这个问题的有效计算方法,因为它可以用稍后演示的算术来解决。我假设您尝试按照您在问题中建议的 while 循环来解决它,这纯粹是 while 循环中的学习练习。话虽如此,您将需要您的循环条件取决于您正在修改的值。在您的情况下,您可以使其依赖于 j,并将 j 初始化为 national_debt 的起始值。这是一个使用更冗长的变量名称的更完整的示例:
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
long initial_national_debt = 19900000000000;
long national_debt = initial_national_debt;
long payment_size = 100000000;
while (national_debt > 0)
{
Console.WriteLine(national_debt);
national_debt -= payment_size;
}
}
}
}
@maccettura 提出的答案未能正确计算还清债务所需的天数。例如,如果债务为 100 美元,付款增量为 200 美元,则需要一天才能还清债务。然而,截断整数除法表示 100 / 200 等于零。在这种情况下,显然不需要零天就可以还清债务。
正如我之前提示的,这个问题可以直接解决。请参阅以下代码段:
using System;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
long national_debt = 19900000000000;
long payment_size = 100000000;
long total_days_to_pay = national_debt / payment_size;
// if the debt is not evenly divisible by the payment size, then there is one partial day of debt
if (national_debt % payment_size != 0)
total_days_to_pay++;
Console.WriteLine("It takes " + total_days_to_pay + " total days to pay off the national debt.");
Console.WriteLine("That's " + total_days_to_pay / 365 + " years and " + total_days_to_pay % 365 + " days !");
}
}
}
我认为接受的答案不是很好。依赖于 incrementing/decrementing 数字的 while 循环通常意味着您不应使用 while 循环。处理这个问题的更好方法是使用 for
循环(并将其放在一个方法中,以便它可以重新使用)
private static void CalculatePayDownDays(long payPerDay, long nationalDebt)
{
long days = (long)Math.Ceiling((decimal)nationalDebt / payPerDay);
for (long i = 1; i < days + 1; i++)
{
nationalDebt -= payPerDay;
Console.WriteLine("Day {0}, New Balance: {1:c}", i, nationalDebt);
}
}
Fiddle here
编辑
对于我们这些迂腐的人,我稍微修改了方法