C# 将一个数字附加到一个整数,并确保每个数字的总和以1结尾

C# 将一个数字附加到一个整数,并确保每个数字的总和以1结尾,c#,algorithm,sum-of-digits,C#,Algorithm,Sum Of Digits,c中的算法是什么 例1: 给定n=972,函数随后将附加3以生成9723,因为9+7+2+3=21以1结尾。函数应该返回3 例2: 给定n=33,函数将追加5使其成为335,因为3+3+5=11以1结尾。函数应返回5。通常的算法是: 10-模10+1模10的数字之和 以上表达式的答案是您需要的数字 mod 10的数字之和为您提供当前余数,当您从10中减去它时,您将得到余数为0所需的值。当您添加1时,您将获得所需的值以获得1的余数。最后一个mod 10以1位数字的形式给出答案 在C语言中,类似这样

c中的算法是什么

例1: 给定n=972,函数随后将附加3以生成9723,因为9+7+2+3=21以1结尾。函数应该返回3

例2: 给定n=33,函数将追加5使其成为335,因为3+3+5=11以1结尾。函数应返回5。

通常的算法是:

10-模10+1模10的数字之和

以上表达式的答案是您需要的数字

mod 10的数字之和为您提供当前余数,当您从10中减去它时,您将得到余数为0所需的值。当您添加1时,您将获得所需的值以获得1的余数。最后一个mod 10以1位数字的形式给出答案

在C语言中,类似这样:

一般来说,算法是:

10-模10+1模10的数字之和

以上表达式的答案是您需要的数字

mod 10的数字之和为您提供当前余数,当您从10中减去它时,您将得到余数为0所需的值。当您添加1时,您将获得所需的值以获得1的余数。最后一个mod 10以1位数字的形式给出答案

在C语言中,类似这样:


算法与语言无关。要求用C语言编写算法没有多大意义

像只有一个算法那样要求算法也是同样的错误

所以,让我们一步一步来做

首先,我们注意到只有结果的最后一位是有意义的。因此,我们将对现有数字求和,然后忽略除最后一个以外的所有数字。一个很好的方法是取模10的和

我们得到了现有数字的和,我们想再加上一个数字,这样两个数字的和以1结尾

对于绝大多数情况,这意味着sum+newDigit=11。重新排列得到newDigit=11-总和

然后我们可以再次取模10,以便将其减少到一位数


最后,我们将原始数字乘以10,并将新数字相加。

算法与语言无关。要求用C语言编写算法没有多大意义

像只有一个算法那样要求算法也是同样的错误

所以,让我们一步一步来做

首先,我们注意到只有结果的最后一位是有意义的。因此,我们将对现有数字求和,然后忽略除最后一个以外的所有数字。一个很好的方法是取模10的和

我们得到了现有数字的和,我们想再加上一个数字,这样两个数字的和以1结尾

对于绝大多数情况,这意味着sum+newDigit=11。重新排列得到newDigit=11-总和

然后我们可以再次取模10,以便将其减少到一位数


最后,我们将原来的数字乘以10,再加上新的数字。

另一种方法是只使用mod一次

   int sum = 0;
    foreach (char c in s)
        sum += Convert.ToInt32(c.ToString());
    int diff = 0;
    while (sum % 10 != 1)
    {
        sum++; 
        diff++; 
    }
    if (diff > 0)
       s += diff.ToString();

另一种选择是只使用mod一次

   int sum = 0;
    foreach (char c in s)
        sum += Convert.ToInt32(c.ToString());
    int diff = 0;
    while (sum % 10 != 1)
    {
        sum++; 
        diff++; 
    }
    if (diff > 0)
       s += diff.ToString();

是,C++中更容易。

std::string s = boost::lexical_cast<string>( i );
i = i * 10 + 9 - std::accumulate( s.begin(), s.end(), 8 - '0' * s.size() ) % 10;

<> >代码高尔夫球…

,在C++中更容易。

std::string s = boost::lexical_cast<string>( i );
i = i * 10 + 9 - std::accumulate( s.begin(), s.end(), 8 - '0' * s.size() ) % 10;

沉迷于代码高尔夫…

事实上,如果mod 10的数字之和是0,那么你的表达式会给出11。正确的数字是10-模10+1模10的数字之和。或者,等价地,1-模10的数字之和。[因为根据通常的数论惯例,-33 mod 10是7,等等]这给出的答案总是在0到9之间。实际上,如果mod 10的数字之和是0,那么你的表达式给出11。正确的数字是10-模10+1模10的数字之和。或者,等价地,1-模10的数字之和。[因为按照通常的数论惯例,-33 mod 10是7,等等]这给出的答案总是在0到9之间。