数字の合計を計算する実装のうち、最も速くて読みやすいものは何ですか?
つまり与えられた数:17463 = 1 + 7 + 4 + 6 + 3 = 21
文字列を使用せずに算術的に行うことができます:
sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
私が使う
int result = 17463.ToString().Sum(c => c - '0');
1行のコードのみを使用します。
整数については、Greg Hewgillがほとんどの答えを持っていますが、n <0を説明するのを忘れています。-1234の桁の合計は、-10ではなく10のままです。
n = Math.Abs(n);
sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
数値が浮動小数点数である場合、別のアプローチをとる必要があり、chaowmanのソリューションは小数点に達すると完全に失敗します。
int num = 12346;
int sum = 0;
for (int n = num; n > 0; sum += n % 10, n /= 10) ;
public static int SumDigits(int value)
{
int sum = 0;
while (value != 0)
{
int rem;
value = Math.DivRem(value, 10, out rem);
sum += rem;
}
return sum;
}
私は完了のためにこれを投稿するだけだと思った:
数字の再帰的な合計が必要な場合:1746-> 1 + 7 + 4 + 6 + 3 = 21-> 2 + 1 =
その後、最善の解決策は
int result = input % 9;
return (result == 0 && input > 0) ? 9 : result;
私はチャウマンの反応が好きですが、1つの変更を行います
int result = 17463.ToString().Sum(c => Convert.ToInt32(c));
C-'0'でさえ、構文が機能するかどうかさえわかりませんか? (2つの文字を減算すると、結果として文字が得られると思いますか?)
私はそれが最も読みやすいバージョンだと思います(すべての文字に対してそれを行うことを示すラムダ式と組み合わせたWordの合計の使用)。しかし、確かに、私はそれが最速になるとは思わない。
int n = 17463; int sum = 0;
for (int i = n; i > 0; i = i / 10)
{
sum = sum + i % 10;
}
Console.WriteLine(sum);
Console.ReadLine();
private static int getDigitSum(int ds)
{
int dssum = 0;
while (ds > 0)
{
dssum += ds % 10;
ds /= 10;
if (dssum > 9)
{
dssum -= 9;
}
}
return dssum;
}
これは、0〜9の数字の合計を提供するためです。
最も読みやすい実装は次のようにすることをお勧めします。
public int sum(int number)
{
int ret = 0;
foreach (char c in Math.Abs(number).ToString())
ret += c - '0';
return ret;
}
これは機能し、非常に読みやすいです。ところで:Convert.ToInt32( '3')は3ではなく51を与えます。Convert.ToInt32( '3'-'0')は3を与えます。
最速の実装はGreg Hewgillの算術ソリューションだと思います。
しばらく前に、何かの数字の合計を見つけなければなりませんでした。私はMuhammad Hasan Khanのコードを使用しましたが、正しい数値を繰り返し小数として返しました。つまり、数字の合計が4だったとき、4.44444444444444などになります。したがって、このコードで毎回正しい数字の合計を取得しました:
double a, n, sumD;
for (n = a; n > 0; sumD += n % 10, n /= 10);
int sumI = (int)Math.Floor(sumD);
ここで、aは数字の合計が必要な数字、nはこのプロセスに使用されるdouble、sumDはdoubleの数字の合計、sumIは整数の数字の合計、したがって正しい数字の合計です。
#include <stdio.h>
int main (void) {
int sum = 0;
int n;
printf("Enter ir num ");
scanf("%i", &n);
while (n > 0) {
sum += n % 10;
n /= 10;
}
printf("Sum of digits is %i\n", sum);
return 0;
}
最も簡単で簡単な方法は、ループを使用して 桁の合計を見つける にすることです。
int sum = 0;
int n = 1234;
while(n > 0)
{
sum += n%10;
n /= 10;
}
int j, k = 1234;
for(j=0;j+=k%10,k/=10;);
static int SumOfDigits(int num)
{
string stringNum = num.ToString();
int sum = 0;
for (int i = 0; i < stringNum.Length; i++)
{
sum+= int.Parse(Convert.ToString(stringNum[i]));
}
return sum;
}
while(ino!=0 )
{
digit=(ino%10));
printf("%d",digit);
ino=ino/10;
}
このような配列の場合i/p:10 25 712 65
これは機能しません。誰かが他のロジックを取得した場合、他のロジックを試す必要があります。配列要素を追加するためにそれを投稿してください。