欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++大整數(shù)加法解題思路及參考代碼

 更新時(shí)間:2024年03月19日 10:19:32   作者:繪繪~  
大整數(shù)加法的思路是用兩個(gè)數(shù)組儲(chǔ)存兩個(gè)整數(shù)的每一位然后分別相加,下面這篇文章主要給大家介紹了關(guān)于C++大整數(shù)加法解題思路及參考代碼的相關(guān)資料,需要的朋友可以參考下

題目

輸入

輸入數(shù)據(jù)有多組。首先輸入一個(gè)整數(shù)T,表示有T組輸入。

每組輸入兩個(gè)大整數(shù),并用空格隔開。每個(gè)整數(shù)最多1000位。沒有負(fù)數(shù)輸入。

輸出

對(duì)于每組輸入,輸出兩個(gè)整數(shù)的和,單獨(dú)占一行。

樣例輸入

2
1 2
112233445566778899 998877665544332211

樣例輸出

3
1111111111111111110

解題思路

這個(gè)整體思路大家都知道,要注意的點(diǎn)就是在邊界情況的處理上,比如進(jìn)位的操作,最高位進(jìn)位判斷這些。還有可能有前導(dǎo)0的情況;

參考代碼

#include<bits/stdc++.h>

using namespace std;

string get_add(string a, string b) {
    int i, add = 0, len = max(a.length(), b.length());
    int nums[1001] = {0};
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    for(i = 0; i < len; i++) {
        int num1 = (i < a.length()) ? (a[i]-'0') : 0;
        int num2 = (i < b.length()) ? (b[i]-'0') : 0;
        int num = num1 + num2 + add;
        nums[i] = num % 10;
        add = num / 10;
    }

    if(add > 0) // 處理最高位進(jìn)位
        nums[i] = add;
    string c;
    while(i >= 0) { // 數(shù)組逆序拼接得到結(jié)果
        c += to_string(nums[i]);
        i--;
    }

    if(c[0] == '0' && c.length() > 1) // 移除前導(dǎo)0
        c.erase(0, 1);
    return c;

}

int main() {
    int T;
    cin >> T;
    string a, b;
    getline(cin, a);
    while(T--) {
        cin >> a >> b;
        string c = get_add(a, b);
        cout << c << endl;
    }
    return 0;
}

附:c++ 大整數(shù)加法、減法、乘法

#include<string.h>
#include<iostream>

std::string add(std::string s1,std::string s2) {
	std::string s3;
	if(s1.length()<s2.length()) {
		while(s1.length()<s2.length()) {
			s1="0"+s1;
		}
	} else {
		while(s2.length()<s1.length()) {
			s2="0"+s2;
		}
	}
	int up=0;
	int k;
	int len=s1.length()-1;
	while(len>=0) {
		k=(s1.at(len) + s2.at(len) + up - '0' - '0');
		up = k/10;
		s3=(char)(k % 10 + '0') + s3;
		len--;
	}
	if(up)
		s3="1"+s3;
	return s3;
}

std::string sub(std::string s1,std::string s2) {
	if(s1==s2) {
		return "0";
	}
	std::string s3;
	bool flag=false;
	if(s1.length()<s2.length() || (s1.length()==s2.length() && s1<s2)) {
		std::string s=s1;
		s1=s2;
		s2=s;
		flag=true;
	} else {
		s3="";
	}
	while(s2.length()<s1.length()) {
		s2="0" + s2;
	}
	int k,down=0;
	for(int i=s1.length()-1; i>=0; i--) {
		k=s1[i] -s2[i] +down;
		if(k<0) {
			down=-1;
			k=10+k;
		} else {
			down=0;
		}
		s3=(char)('0' + k) + s3;
	}
	k=0;
	while(s3[k]=='0' ) {
		k++;
	}
	s3=s3.substr(k);
	if(flag)
		s3="-"+s3;
	return s3;
}

std::string mul(std::string s1,std::string s2) {
	if(s1=="0" || s2=="0")
		return "0";
	if(s1=="1")
		return s2;
	if(s2=="1")
		return s1;
	std::string s3;
	int len=s1.length() + s2.length() -1;
	for(int i=0; i<len; i++) {
		s3+="0";
	}
	int up=0,k;
	std::string flag="";
	for(int i=s1.length()-1; i>=0; i--) {
		for(int j=s2.length()-1; j>=0; j--) {
			k=s3[i+j]-'0' + (s1[i]-'0')*(s2[j]-'0') ;
			up=k/10;
			s3[i+j]=(char)(k%10+'0');
			int d=1;

			while(up>0) {
				//首位進(jìn)位
				if(i==0 && j==0 && up>0) {
					flag=(char)("0"+ up);
					break;
				}
				k=(char)(s3[i+j-d]+up-'0');
				up=k/10;
				s3[i+j-d]=(char)(k%10+'0');
				d++;
			}

		}
	}
	return flag + s3;
}

總結(jié) 

到此這篇關(guān)于C++大整數(shù)加法解題思路及參考代碼的文章就介紹到這了,更多相關(guān)C++大整數(shù)加法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用QGraphicsView實(shí)現(xiàn)氣泡聊天窗口+排雷功能

    使用QGraphicsView實(shí)現(xiàn)氣泡聊天窗口+排雷功能

    這篇文章主要介紹了使用QGraphicsView實(shí)現(xiàn)氣泡聊天窗口+排雷,重點(diǎn)給大家介紹使用QWebEngineView控件內(nèi)嵌html+CSS的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2022-04-04
  • C++ 遍歷二叉樹實(shí)例詳解

    C++ 遍歷二叉樹實(shí)例詳解

    這篇文章主要介紹了C++ 遍歷二叉樹實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐

    vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐

    本文主要介紹了vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • VScode中添加頭文件和源文件(C/C++)的方法

    VScode中添加頭文件和源文件(C/C++)的方法

    使用VSCode編譯C/C++時(shí),會(huì)存在找不到頭文件的情況,下面這篇文章主要給大家介紹了關(guān)于VScode中添加頭文件和源文件(C/C++)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • C++記錄程序運(yùn)行時(shí)間的四種方法

    C++記錄程序運(yùn)行時(shí)間的四種方法

    在學(xué)習(xí)過程中很重要的一個(gè)必會(huì)的小技巧:計(jì)算某一段代碼的執(zhí)行時(shí)間,可以用來分析代碼的效率和算法的時(shí)間復(fù)雜度等等(個(gè)人主要是在總結(jié)各種排序算法時(shí)遇到的這個(gè)方法),本文給大家介紹了C++記錄程序運(yùn)行時(shí)間的四種方法,需要的朋友可以參考下
    2025-03-03
  • 完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問題

    完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問題

    使用QT提供的QChartView來繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報(bào)錯(cuò)呢,下面小編給大家?guī)砹薗T QGraphicsView 提升到QChartView報(bào)錯(cuò)解決方案,感興趣的朋友一起看看吧
    2023-05-05
  • C++模板實(shí)現(xiàn)順序棧

    C++模板實(shí)現(xiàn)順序棧

    這篇文章主要為大家詳細(xì)介紹了C++模板實(shí)現(xiàn)順序棧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語(yǔ)言 數(shù)據(jù)存儲(chǔ)方式知識(shí)點(diǎn)詳解

    C語(yǔ)言 數(shù)據(jù)存儲(chǔ)方式知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家整理的是關(guān)于C語(yǔ)言 數(shù)據(jù)存儲(chǔ)方式知識(shí)點(diǎn)詳解,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • 關(guān)于STL的erase()陷阱-迭代器失效問題的總結(jié)

    關(guān)于STL的erase()陷阱-迭代器失效問題的總結(jié)

    下面小編就為大家?guī)硪黄P(guān)于STL的erase()陷阱-迭代器失效問題的總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++基于boost asio實(shí)現(xiàn)sync tcp server通信流程詳解

    C++基于boost asio實(shí)現(xiàn)sync tcp server通信流程詳解

    這篇文章主要介紹了C++基于boost asio實(shí)現(xiàn)sync tcp server通信的流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論