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