C# 将一个数字附加到一个整数,并确保每个数字的总和以1结尾
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# 将一个数字附加到一个整数,并确保每个数字的总和以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语言编写算法没有多大意义 像只有一个算法那样要求算法也是同样的错误 所以,让我们一步一步来做 首先,我们注意到只有结果的最后一位是有意义的。因此,我们将对现有数字求和,然后忽略除最后一个以外的所有数字。一个很好的方法是取模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之间。