プロが教える店舗&オフィスのセキュリティ対策術

https://projecteuler.net/problem=16

215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.

What is the sum of the digits of the number 21000?

結論からお伝えすると、答えを教えてください。C, C++, Javaのどれかで。
コードと入力と出力とできれば解説もお願いします。
プログラミング未経験でも簡単に理解できるように説明してほしい。

私の考え
オーバーフローが発生します。不可能である。

A 回答 (3件)

#include <stdio.h>


int main()
{
unsigned sumDigit = 0;
for (unsigned val = 1u << 1000; val; sumDigit += val%10, val /= 10);
printf("%zu\n", sumDigit);
}

なお int が 1001ビット以上の環境を用意すること.
    • good
    • 0

> 215 = 32768


> 21000

何のことだか、と思い元の問題を見ると
2^15=32768
2^1000
のことだった。


> オーバーフローが発生します。不可能である。

Javaなら、BigIntegerという通常より大きい桁の整数を扱えるクラスを使えばオーバーフローしないで計算できる。
https://docs.oracle.com/javase/jp/8/docs/api/jav …

同様のものは、C/C++の標準ライブラリには無いが、公開されているライブラリで実現できる。
あるいは、この問題で使う程度の内容なら自作できる
https://ja.wikipedia.org/wiki/%E4%BB%BB%E6%84%8F …

各桁の値を知る方法でメジャーなのは次に二つ
・文字列に変換し、1文字ずつ調べる
・ ある値を10で割る(端数切り捨て)と、 商は1の位を除いた値になり、余りは1の位の値になる。
これを割られる値が0になるまで繰り返すと、全ての位の値が余りとして取り出せる。
    • good
    • 0

21000 って「2万1千」だよね. なら, その各位の数字の和は 3 に決まってるじゃん.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!