新知识:
STL容器 vector向量,理解为数组,push_back在末尾插入(操作很方便)
简单写个题目
如大标题,加法,给定两整数a b,输出两数之和。(a b很大)
模板如下:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> add(vector<int>& A, vector<int>& B); //函数声明不解释
int main()
{
string a, b; //默认a b超出longlong范围
vector<int> A, B;
cin >> a >> b; //a=98765432100
for (int i = a.size() - 1; i >= 0; i--)
A.push_back(a[i] - '0'); //倒序存储A=00123456789
//a[i]-'0'强制类型转换
for (int i = b.size() - 1; i >= 0; i--)
B.push_back(b[i] - '0');
auto C = add(A, B); //auto 自动识别数据类型
for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]); //输出两数之和C
return 0;
}
vector<int> add(vector<int>& A, vector<int>& B)
{
vector<int> C;
int t = 0; //t表示两数分别各位上数字之和
for (int i = 0; i < A.size() || i < B.size(); i++) //i<两数中最长数的位数
{
if (i < A.size()) t += A[i]; //若没到达最高位,A此位上的数加给t
if (i < B.size()) t += B[i]; //同理
C.push_back(t % 10); //C串末尾放t的个位
t /= 10; // t/=10 留十位,进入下次循环
}
if (t) C.push_back(1); //t=1,C末尾放1;t=0,结束
return C;
}
add函数部分另一种写法
vector<int> add(vector<int>& A, vector<int>& B)
{
vector<int> C;
int t = 0; //t表示两数分别各位上数字之和
if(A.size()<B.size()) return add(B,A);
for (int i = 0; i < A.size(); i++) //i<两数中最长数的位数
{
t += A[i];
if(i<B.size()) t+=B[i];
C.push_back(t % 10);
t /= 10;
}
if (t) C.push_back(1);
return C;
}