0
0

More than 3 years have passed since last update.

巨大な桁の足し算

Last updated at Posted at 2020-09-21

1.問題

2つの巨大な桁数(ただし2つの数字の桁数は同じ)の足し算を実行する処理を考える。

2.4桁同士の足し算例

巨大な桁数というテーマだったため、下記のように各桁構成が
わかるように図示していく。
PCの性能の許す限り、桁数の制限なく整数として加算できる言語もある(python)が,
そうでない言語の場合は下記のように考えていく必要がある。

  9999
+9998
————-
19997

3桁目までの文字列は前の桁の繰り上がり数と、各桁の足し算の1桁目で構成される事がわかる。
4桁目の足し算では、3桁目の繰り上がり+4桁同士の足し算の結果を3桁目までの文字列と連結すれば
いい事がわかる。

3.コード例(Python:文字列処理をしたもの)


#2つの数字の入力
in1=input()
in2=input()
#入力文字列の長さ
len1=len(in1)
#出力結果文字列
str1=''
#前の桁の繰り上がり状態0:繰り上がりなし 1:繰り上がりあり
p_fugo=0

for i in range(len1):
    c1=in1[len1-i-1:len1-i]
    c2=in2[len1-i-1:len1-i]
    ret=int(c1)+int(c2)+p_fugo

    if ret >= 10 and i<len1-1:
        ret=ret-10
        fugo=1
    else:
        if ret<10 and i<len1-1:
            fugo=0

    str1=str(ret)+str1
    p_fugo=fugo

print(str1)

4.コード例(Python:整数として演算)

in1=input()
in2=input()

in3=int(in1)+int(in2)
print(in3)

5.コード例(PHP)

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!
    //2つの数字の入力
    $in1 = fgets(STDIN);
    $in1 = trim($in1);
    $in2 = fgets(STDIN);
    $in2 = trim($in2); 


    //入力文字列の長さ
    $len1=strlen($in1);
    //#出力結果文字列
    $str1="";
    //前の桁の繰り上がり状態0:繰り上がりなし 1:繰り上がりあり
    $p_fugo=0;

    for($i=0;$i<$len1;$i++){
        if($i>0){
            $c1=substr($in1,$len1-1-$i,1);
            $c2=substr($in2,$len1-1-$i,1);        
        }else{
            $c1=substr($in1,$len1-1-$i);
            $c2=substr($in2,$len1-1-$i);
        }
        $ret=(int)($c1)+(int)($c2)+$p_fugo;

        if($ret>=10 && $i<$len1-1){
            $ret=$ret-10;
            $fugo=1;
        }else{
            if($ret<10 && $i<$len1-1){
                $fugo=0;
            }
        }

        $str1=strval($ret).$str1;
        $p_fugo=$fugo;
    }

    echo $str1;
?>

入力

19477493103053478137749318918913894542872478759819
19384757571019848171788474166467574776163353517133

出力結果

38862250674073326309537793085381469319035832276952
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0