複数の大きな数を合計するC++プログラム
問題の概要
いくつかの大きな数が格納された配列 nums が与えられます。これらの数値は非常に大きく、通常の int 型では扱いきれない可能性があります。この記事では、これらの数値の合計を正確に求める方法を解説します。
例えば、入力が nums = [5000000003, 3000000005, 8000000007, 2000000009, 7000000011] の場合、出力は 25000000035 となります。
解決の手順
- 変数 x を 0 で初期化します
- i を 0 から配列 nums のサイズ未満まで1ずつ増やしながら、以下の処理を繰り返します
- x に nums[i] を加算していきます
- 最終的な x を結果として返します
ポイント:long long int 型を使う理由
個々の数値やその合計は、32ビット整数型(int)の最大値である 2,147,483,647 を簡単に超えてしまいます。そこで、約 ±9.2 × 1018 まで表現できる long long int 型を使用することで、オーバーフローを防ぎ、正確な合計値を得ることができます。
実装例
それでは、実際のコードを見てみましょう。
#include <iostream>
#include <vector>
using namespace std;
long long int solve(vector<long long int> nums){
long long int x = 0;
for(int i=0; i<nums.size(); i++){
x = x + nums[i];
}
return x;
}
int main(){
vector<long long int> nums = {5000000003, 3000000005, 8000000007, 2000000009, 7000000011};
cout << solve(nums);
}
入力
{5000000003, 3000000005, 8000000007, 2000000009, 7000000011}
出力
25000000035
まとめ
大きな数を扱う際には、適切なデータ型の選択が非常に重要です。long long int 型を使用すれば、オーバーフローを気にせずに複数の大きな数の合計を計算できます。また、このアルゴリズムの計算量は配列の要素数 n に対して O(n) であり、非常に効率的です。同様のアプローチは、金額の集計や大量のID管理など、実務でも幅広く応用できます。
-
C++で2つの2進数文字列を加算するプログラムの書き方
2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁
-
C++で2つの数値を加算するプログラムの書き方【サンプルコード付き】
加算(足し算)は、最も基本的な算術演算の一つです。2つの数値を加算するプログラムは、指定された2つの数値の合計を計算し、その結果を画面に表示します。この記事では、C++で2つの数値を加算する方法を、変数を使った基本例と配列を使った応用例の2パターンに分けて解説します。例1:変数を使って2つの数値を加算するまずは、最もシンプルな方法です。2つの整数型変数を用意し、その合計を別の変数に格納して出力します。#include <iostream> using namespace std; int main() { int num1 = 15, num2 = 10, sum;