C# 数学运算返回0

C# 数学运算返回0,c#,C#,我无法理解为什么此操作会向我返回0。 有人能帮我一下吗,有一段时间没用c了,也许有些东西改变了,不能再这样做了 long temp = 18801010019; long A = getFirstDigit(temp); // This returns the first digit of whole number long B = (temp / (int)Math.Pow(10, 9) % 10); long C = (temp / (int)Math.Pow(10, 8) % 10); l

我无法理解为什么此操作会向我返回0。 有人能帮我一下吗,有一段时间没用c了,也许有些东西改变了,不能再这样做了

long temp = 18801010019;
long A = getFirstDigit(temp); // This returns the first digit of whole number
long B = (temp / (int)Math.Pow(10, 9) % 10);
long C = (temp / (int)Math.Pow(10, 8) % 10);
long D = (temp / (int)Math.Pow(10, 7) % 10);
long E = (temp / (int)Math.Pow(10, 6) % 10);
long F = (temp / (int)Math.Pow(10, 5) % 10);
long G = (temp / (int)Math.Pow(10, 4) % 10);
long H = (temp / (int)Math.Pow(10, 3) % 10);
long I = (temp / (int)Math.Pow(10, 2) % 10);
long J = (temp / (int)Math.Pow(10, 1) % 10);
long S = (A * 1) + (B * 2) + (C * 3) + (D * 4) + (E * 5) + (F * 6) + (G * 7) + (H * 8) + (I * 9) + (J * 1);

您的代码似乎不完整且不正确。 我想你应该用一个递增的乘数来加上所有的数字。你可以考虑使用一个循环。 编辑:添加Linq解决方案:

using System;
using System.Linq;

namespace MathReturns0
{
    class Program
    {
        static void Main(string[] args)
        {
            var temp = 18801010019;
            var A = (temp / (long)(Math.Pow(10, 10)) % 10);
            var B = (temp / (long)(Math.Pow(10, 9)) % 10);
            var C = (temp / (long)(Math.Pow(10, 8)) % 10);
            var D = (temp / (long)(Math.Pow(10, 7)) % 10);
            var E = (temp / (long)(Math.Pow(10, 6)) % 10);
            var F = (temp / (long)(Math.Pow(10, 5)) % 10);
            var G = (temp / (long)(Math.Pow(10, 4)) % 10);
            var H = (temp / (long)(Math.Pow(10, 3)) % 10);
            var I = (temp / (long)(Math.Pow(10, 2)) % 10);
            var J = (temp / (long)(Math.Pow(10, 1)) % 10);
            var K = (temp / (long)(Math.Pow(10, 0)) % 10);
            var S = (A * 1) + (B * 2) + (C * 3) + (D * 4) + (E * 5) + (F * 6) + (G * 7) + (H * 8) + (I * 9) + (J * 10) + (K * 11);

            Console.WriteLine("S has the value {0}.", S);

            Console.WriteLine("AddDigits has the value {0}.", AddDigits(temp));

            Console.WriteLine("AddDigits has the value {0}.", AddDigits2(temp));
        }

        static int AddDigits(long val)
        {
            var multiplier = Convert.ToInt32(Math.Ceiling(Math.Log10(val)));
            var output = 0;
            while (val > 0)
            {
                output += multiplier * Convert.ToInt32(val % 10);
                multiplier--;
                val /= 10;
            }
            return output;
        }

        static int AddDigits2(long val)
        {
            return val.ToString().ToList().Select((x, i) => int.Parse(x.ToString()) * (i+1)).Sum();
        }

    }
}

这只是非本地C#writer的快速代码。可能还有更优雅的解决方案

调试器告诉您什么?我无法复制该问题。这是一个应该返回S的函数吗?当我运行它时,返回的S值是54。@Arch2k可能他的
getFirstDigit(temp)
被破坏了。。。因为这个问题中缺少函数…是的,我写了自己的函数来匹配。很难想象它会返回0,虽然这可能是巧合。@Arch2K是的,如果a=0,那么答案是53。。。代码不完整。。。他在哪里找到0?结论:不完全性的旗杆