1291467713 n進数の累乗の計算で悩んでおります。添付ファイルをご覧いただきたい次第です。

2進数を10進数にするのは、習ったこともあるので、なんとかできるのですが。。。それを10乗とかn乗しなければならない場合、どのように計算すればよいのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2010/12/04 22:01:56
  • 終了:2010/12/06 01:53:33

ベストアンサー

id:rsc96074 No.5

rsc回答回数4393ベストアンサー獲得回数4022010/12/05 01:37:45

ポイント100pt

 基本は、10進数に直してから、それぞれ、n進数に直します。

たとえば、「(93)^10」→「(93)_10」の間違いだとして、答えることにします。

1.

 初めから、10進数なので、これを2進数に直します。

2)93
 ---
2)46・・・1↑
 ---
2)23・・・0↑
 ---
2)11・・・1↑
 ---
2) 5・・・1↑
 ---
2) 2・・・1↑
 ---
2) 1・・・0↑
 ---
   0・・・1↑

∴(93)_10=(1011101)_2

2.

 まず、10進数に直します。

(CF)_16=(12*16+15)_10=(207)_10

 つぎに、16進数に直します。

2)207
 ----
2)103・・・1↑
 ----
2) 51・・・1↑
 ----
2) 25・・・1↑
 ----
2) 12・・・1↑
 ----
2)  6・・・0↑
 ----
2)  3・・・0↑
 ----
2)  1・・・1↑
 ----
    0・・・1↑

∴(207)_10=(11001111)_2

∴(CF)_16=(11001111)_2

3.

 10進数に直すと、

(10011100)_2=(1*2^7+1*2^4+1*2^3+1*2^2)_10=(156)_10

 ちなみに、組立除法を用いることもできます。(参考)

2) 1  0  0  1   1   1   0    0 
      2  4  8  18  38  78  156 
-------------------------------
   1  2  4  9  19  39  78 (156 

4.

 まず、10進数に直すと、

(11100110)_2=(1*2^7+1*2^6+1*2^5+1*2^2+1*2)_10=(230)_10

 次に、16進数に直すと、

16)230
  ----
16) 14・・・6↑
  ----
     0・・・14↑

∴(230)_10=(E6)_16

∴(11100110)_2=(E6)_16

※参考URL

http://d.hatena.ne.jp/rsc96074/20101204/1291480290

id:moon-fondu

ありがとうございます、理解できました!

関数電卓 EvalCalc、チェックしてみます。

2010/12/06 01:48:15

その他の回答(5件)

id:nekota_nekomura No.1

レシラム100%回答回数2ベストアンサー獲得回数02010/12/04 22:02:51

電卓などどうですか?

id:moon-fondu

計算でやりたいです。

2010/12/04 22:13:49
id:nekota_nekomura No.2

レシラム100%回答回数2ベストアンサー獲得回数02010/12/04 22:07:50

親にも相談したらどうですか?

id:moon-fondu

一人暮らしなので親がいません。

2010/12/04 22:13:51
id:a-kuma3 No.3

a-kuma3回答回数4490ベストアンサー獲得回数18582010/12/04 22:24:51

ポイント30pt

添付ファイルの問題を見てて思ったんですが、 "^" の記号が「累乗」を表してないんじゃないかな?

問題2 は、明らかに16進数だし、問題3,4 は、2進数以外だと考えるのは無理があるけど、問題1 は、93 は 10進数か16進数か、ぱっと見には分からないですよね。

^10 が、10進数だということを意味しているのだと想像します。

# 果てしなく不適切だと思いますが。


で、塁上の話。

難しく考えることはありません。掛け算を何回もするだけの話です。

10進数だって、10 とか 100 をn乗するのは簡単だけど、153 とか 77 を 23乗しろとか言われたら、計算するしかないでしょう。

後は、計算結果を変換するだけです。

id:moon-fondu

すいません、間違えてました(>_<)

2010/12/06 01:52:23
id:loio No.4

loio回答回数342ベストアンサー獲得回数502010/12/05 00:30:19

ポイント100pt

10乗は、10回掛け合わせることなので、10回掛け合わせたあと2進数に変換したらよいのではないかと思いますが。。。

93^10を2進数にするには、まず93^10を計算してからそれを2進数に変換します。

93^10=48398230717929318249だそうです。

2進数に変換したら1001111110101001000011100110100111000011100100110110011101101001ですね。

CF^10は、CF(16)を10進になおします。すると207

207^16=1.1363850910619971253629575794798e+37

おっと、ここで電卓ならオーバフローしますかね。

自分で、多桁の演算ルーチンを組む必要があるようです。

#define MAX_KETA 100

int x[MAX_KETA];

int y[MAX_KETA];

int z[MAX_KETA*2];

void kakezan(int*x,int*y,int*z){

for(int i=0;i<MAX_KETA;i++)</p>

for(int j=0;j<MAX_KETA;j++)</p>

{

z[i+j]+=x[i]*y[j];

for(int k=i+j;k<MAX_KETA;k++)</p>

if(z[k]>=10){

z[k+1]+=z[k]/10;

z[k]=z[k]%10;

}

else

break;

}

}

こんなかんじで。

id:moon-fondu

すいません、勘違いさせてしまって。

でも計算できるんですね!

「多桁の演算ルーチン」なんて、はじめて聞きました・・・マクロでしょうか?

このコードを、Excel上とかで実行すると、計算できるのですか?

2010/12/06 01:52:05
id:rsc96074 No.5

rsc回答回数4393ベストアンサー獲得回数4022010/12/05 01:37:45ここでベストアンサー

ポイント100pt

 基本は、10進数に直してから、それぞれ、n進数に直します。

たとえば、「(93)^10」→「(93)_10」の間違いだとして、答えることにします。

1.

 初めから、10進数なので、これを2進数に直します。

2)93
 ---
2)46・・・1↑
 ---
2)23・・・0↑
 ---
2)11・・・1↑
 ---
2) 5・・・1↑
 ---
2) 2・・・1↑
 ---
2) 1・・・0↑
 ---
   0・・・1↑

∴(93)_10=(1011101)_2

2.

 まず、10進数に直します。

(CF)_16=(12*16+15)_10=(207)_10

 つぎに、16進数に直します。

2)207
 ----
2)103・・・1↑
 ----
2) 51・・・1↑
 ----
2) 25・・・1↑
 ----
2) 12・・・1↑
 ----
2)  6・・・0↑
 ----
2)  3・・・0↑
 ----
2)  1・・・1↑
 ----
    0・・・1↑

∴(207)_10=(11001111)_2

∴(CF)_16=(11001111)_2

3.

 10進数に直すと、

(10011100)_2=(1*2^7+1*2^4+1*2^3+1*2^2)_10=(156)_10

 ちなみに、組立除法を用いることもできます。(参考)

2) 1  0  0  1   1   1   0    0 
      2  4  8  18  38  78  156 
-------------------------------
   1  2  4  9  19  39  78 (156 

4.

 まず、10進数に直すと、

(11100110)_2=(1*2^7+1*2^6+1*2^5+1*2^2+1*2)_10=(230)_10

 次に、16進数に直すと、

16)230
  ----
16) 14・・・6↑
  ----
     0・・・14↑

∴(230)_10=(E6)_16

∴(11100110)_2=(E6)_16

※参考URL

http://d.hatena.ne.jp/rsc96074/20101204/1291480290

id:moon-fondu

ありがとうございます、理解できました!

関数電卓 EvalCalc、チェックしてみます。

2010/12/06 01:48:15
id:yonta24 No.6

yonta24回答回数45ベストアンサー獲得回数72010/12/05 07:36:39

ポイント25pt

1番は、「10進数である”93”を2進数に直しなさい」

2番は、「16進数である”CF”を2進数に直しなさい」

3番は、「2進数である”10011100”を10進数に直しなさい」

4番は、「2進数である”11100110”を16進数に直しなさい」

という意味では無いでしょうか記号がべき乗「^」になっていますが…。


(93)10、(CF)16,

こんな風に書くべきですよね・・。


wiki 2進数の解説ページ

http://ja.wikipedia.org/wiki/%E4%BA%8C%E9%80%B2%E6%B3%95

id:moon-fondu

そうでした、すいませんでした(>_<)

2010/12/06 01:46:18
  • id:ttrr
    素直に93^10を計算して、2進法で表現するのでは駄目なんですか?
    「計算でやりたい」というのは手計算ということですよね。

    2進数で(93^10)は29桁ありますが。
  • id:moon-fondu
    すごいです、ttrrさんは、(93^10)が29桁あることが一瞬でわかったんですね!
    どうすれば判明するのでしょうか?
    もしよろしければ、回答欄にご回答いただければ幸いです。
    よろしくお願いします。
  • id:rsc96074
    ところで、
    「(CF)^16」って、16乗も16進数=16+6=22乗ですか。
  • id:sibazyun
    確かに記号^は累乗に使うけれど、ここでは単に「何進数」
    かをしめしているんじゃないの?
    ・10進数の93を2進数に
    ・16進数のCFを2進数に
    ・2進数の10011100を10進数に、以下略。

    というのは、ある表記がN進数であることは、
    「下付のN」(suffix N)で表すが、
    その「下付」をASCIIで表されないとき、
    普通はアンダーバー(_)で93_10のように
    やるのを、あやまって、「上付き」の記号(^)
    を使ってしまったように思えるから。
  • id:kuro-yo
    93^10は、十進数でも20桁近くあるので、二進数にすると60桁くらいあるような気がしますが、
    それはともかく、

    > ttrrさんは、(93^10)が29桁あることが一瞬でわかったんですね!
    > どうすれば判明するのでしょうか?

    一瞬かどうかは別として、
    moon-fonduさんは、まず、「対数」の知識を身に着けた方がいいと思います。
  • id:garyo
    確かに
    93(dec)->bin
    CF(hex)->bin
    10011100(bin)->dec
    11100110(bin)->hex
    という問題みたいですね。

  • id:kuro-yo
    > 10011100(bin)->dec

    2の補数とかも考慮するのかな…
  • id:loio
    あいやー。longでオーバーフローする多桁演算の問題かとおもいました。

    (93^10)=0b1001111110101001000011100110100111000011100100110110011101101001
  • id:loio
    あいや、この答えもオーバーフローしてた。上の値は間違いです。
  • id:rsc96074
     ちなみに、(^_^;
    93^10=48398230717929318249
    =(101001111110101001000011100110100111000011100100110110011101101001)_2 (?_?;
  • id:garyo
    Rubyでやってみた


    irb(main):005:0> (93**10).to_s(2)
    => "101001111110101001000011100110100111000011100100110110011101101001"
    irb(main):006:0> (0xCF**16).to_s(2)
    => "1000100011001001100100011011011101010101011111101000101111110011011010100010100111001010010011011001110011000010101100000001"
    irb(main):007:0> (0b10011100**2).to_s
    => "24336"
    irb(main):008:0> (0b11100110**2).to_s(16)
    => "cea4"
  • id:garyo
    ^が累乗でなく、基数を示しているとした場合。同じくRubyで。

    irb(main):009:0> 93.to_s(2)
    => "1011101"
    irb(main):010:0> 0xCF.to_s(2)
    => "11001111"
    irb(main):011:0> 0b10011100.to_s
    => "156"
    irb(main):012:0> 0b11100110.to_s(16)
    => "e6"

  • id:garyo
    Rubyなら多倍長演算が言語仕様に含まれているから、何も考えなくても出きるけど、
    cで解けと言われると、多倍長演算の所から組まないといけなくなるから結構難しそう。
  • id:moon-fondu
    皆様すいません、完全に私の表記ミスでした、"^" の記号が「累乗」を表していません!
    お騒がせしました(>_<)
    でも、garyoさんがやってることすごく気になりますね。。。Rubyというのは、「オブジェクト指向スクリプト言語」ですか?
    Rubyを使うと、桁外れの値も計算することができるんですね・・・
  • id:moon-fondu
    >kuro-yoさん
    対数を使えば、(93^10)の桁数が一瞬でわかるんですね・・・
  • id:kuro-yo
    > 対数を使えば、(93^10)の桁数が一瞬でわかるんですね・・・

    対数とは、もともとおおまかな桁数を知るために考えられたものらしいですよ。

    …まぁ、あえて対数を使わなくとも、93が100に近いので、100^10より少し桁数が少ないくらい、と考えれば、
    100^10は明らかに十進数で21桁ありますので、93^10は20桁くらい、とすぐわかります。
    また、10は2^3よりいくらか大きいので、二進数になおせば、十進数の3倍強の桁数になるとわかります。
    ですから、おおよそ60桁くらい、と見積もったわけです。
  • id:garyo
    >でも、garyoさんがやってることすごく気になりますね。。。Rubyというのは、「オブジェクト指向スクリプト言語」ですか?
    >Rubyを使うと、桁外れの値も計算することができるんですね・・

    Rubyは、「オブジェクト指向スクリプト言語」です。
    人(プログラマ)にやさしい言語と言われていて、PCにできることはできるだけPCにやらせるようになっています。
    数字も通常と多倍長が自動的に切り替わるようになっていて、プログラマはオーバーフローを気にせずプログラムを組めるようになっています。
    http://www.namaraii.com/rubytips/?%BF%F4%C3%CD
  • id:garyo
    真面目に基数変換に回答すると


    >1番は、「10進数である”93”を2進数に直しなさい」
    2で割って、あまりの数を逆順に並べる。
    2)93
    ~~~~~~~~
    2)46...1
    ~~~~~~~~~
    2)23...0
    ~~~~~~~~~

    >2番は、「16進数である”CF”を2進数に直しなさい」
    これは16進数一桁→2進数 を覚える。
    プログラマなら当然持ってるスキル.たった16だから
    1→0001
    2→0010
    3→0011
    4→0100
    5→0101
    6→0110
    7→0111
    8→1000
    9→1001
    A→1010
    B→1011
    C→1100
    D→1101
    E→1110
    F→1111

    CFを2進数にするとCが1100,Fが1111なのでつなげて
    11001111

    >3番は、「2進数である”10011100”を10進数に直しなさい」
    これは2の累乗をいって1が立ってる所だけ足していく(これもプログラマならそらで言えるはず)
    1 0
    2 0
    4 1
    8 1
    16 1
    32 0
    64 0
    128 1
    より、4+8+16+128が答え

    >4番は、「2進数である”11100110”を16進数に直しなさい」

    これも2進数→16進数を覚えて入ればすぐできる。

    1110 0110 と4桁づつにわけて
    E 6
    が答え
  • id:moon-fondu
    kuro-yoさん、garyoさん、再回答いただきありがとうございます!勉強になります!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません