赞
踩
目录
给定两个正整数(不含前导 0),计算它们的和。
共两行,每行包含一个整数。
共一行,包含所求的和。
1≤整数长度≤100000
- 12
- 23
35
vector数组中存储的一串数字是由低位到高位的(低位到高位好操作),t用来存储进位
- #include<iostream>
- using namespace std;
- #include<string>
- #include<vector>
- vector<int> add(vector<int> &A,vector<int> &B)
- {
- if(A.size()<B.size())return add(B,A);
- vector<int>C;
- int t=0;
- for(int i=0;i<A.size();i++)
- {
- t=t+A[i];
- if(i<B.size())t=t+B[i];
- C.push_back(t%10);
- t=t/10;
- }
- if(t)C.push_back(t);
- return C;
- }
- int main()
- {
- string a,b;
- cin>>a>>b;
- vector<int>A,B;
- for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
- for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
- vector<int>res=add(A,B);
- for(int i=res.size()-1;i>=0;i--)cout<<res[i];
- return 0;
- }
给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。
共两行,每行包含一个整数。
共一行,包含所求的差。
1≤整数长度≤1e5
- 32
- 11
21
先比较两个数的大小,总是用大数减小数,如果是结果负数的情况结果res=-(B-A)
- #include<iostream>
- using namespace std;
- #include<string>
- #include<vector>
- //judge if A>=B
- bool cmp(vector<int> A,vector<int> B)
- {
- if(A.size()!=B.size())return A.size()>B.size();
- //the position that A.size()==B.size()
- else
- {
- for(int i=A.size()-1;i>=0;i--)
- {
- if(A[i]!=B[i])return A[i]>B[i];
- }
- return true;
- }
- }
- vector<int> sub(vector<int> &A,vector<int> &B)
- {
- //now A is always bigger than B or equal to B
- vector<int>C;
- int t=0;
- for(int i=0;i<A.size();i++)
- {
- if(i<B.size())t=A[i]-B[i]-t;
- else t=A[i]-t;
- C.push_back((t+10)%10);
- if(t<0)t=1;
- else t=0;
- }
- while(C.size()>1 && C.back()==0)C.pop_back();
- return C;
- }
- int main()
- {
- string a,b;
- cin>>a>>b;
- vector<int>A,B;
- for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
- for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
- if(cmp(A,B))
- {
- vector<int>res=sub(A,B);
- for(int i=res.size()-1;i>=0;i--)cout<<res[i];
- }
- else
- {
- vector<int>res=sub(B,A);
- cout<<"-";
- for(int i=res.size()-1;i>=0;i--)cout<<res[i];
- }
- return 0;
- }
给定两个非负整数(不含前导 0) A和 B,请你计算 A×B 的值。
共两行,第一行包含整数 A,第二行包含整数 B。
共一行,包含 A×B 的值。
1≤A的长度≤100000
0≤B≤100000
- 2
- 3
6
适用于一个大数乘一个小数,t用来存储进位
- #include<iostream>
- using namespace std;
- #include<vector>
- vector<int> mul(vector<int> &A,int b)
- {
- vector<int>C;
- int t=0;
- for(int i=0;i<A.size() || t;i++)
- {
- if(i<A.size()) t+=A[i]*b;
- C.push_back(t%10);
- t/=10;
- }
- vector<int>s={0};
- if(C.back()!=0)return C;
- else return s;
- }
- int main()
- {
- string a;
- int b;
- cin>>a>>b;
- vector<int>A;
- for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
- auto C=mul(A,b);
- for(int i=C.size()-1;i>=0;i--)cout<<C[i];
- return 0;
- }
给定两个非负整数(不含前导 0) A,B,请你计算 A/B 的商和余数。
共两行,第一行包含整数 A,第二行包含整数 B。
共两行,第一行输出所求的商,第二行输出所求余数。
1≤A的长度≤100000
1≤B≤10000
B 一定不为 0
- 7
- 2
- 3
- 1
适用于大数除小数,r用来存储余数
- #include<iostream>
- using namespace std;
- #include<vector>
- #include<algorithm>
- vector<int> div(vector<int> &A,int b,int &r)
- {
- vector<int>C;
- r=0;
- for(int i=A.size()-1;i>=0;i--)
- {
- r=r*10+A[i];
- C.push_back(r/b);
- r%=b;
- }
- reverse(C.begin(),C.end());
- while(C.size()>1&&C.back()==0)C.pop_back();
- return C;
- }
- int main()
- {
- string a;
- int b,r;
- cin>>a>>b;
- vector<int>A;
- for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
- auto C=div(A,b,r);
- for(int i=C.size()-1;i>=0;i--)cout<<C[i];
- cout<<endl<<r<<endl;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。