网站后台管理系统查询,移动端网站和微信网页设计,芜湖做网站建设公司,网创目录 前言
1 题目描述
2 分析
2.1 第一步
2.2 第二步
3 代码 前言
详细的代码里面有自己的理解注释
1 题目描述
给定两个正整数#xff08;不含前导 00#xff09;#xff0c;计算它们的差#xff0c;计算结果可能为负数。
输入格式
共两行#xff0c;每行包含一…目录 前言
1 题目描述
2 分析
2.1 第一步
2.2 第二步
3 代码 前言
详细的代码里面有自己的理解注释
1 题目描述
给定两个正整数不含前导 00计算它们的差计算结果可能为负数。
输入格式
共两行每行包含一个整数。
输出格式
共一行包含所求的差。
数据范围
1≤整数长度≤1e5
输入样例
32
13
输出样例
19
2 分析
由前面对高精度-加-高精度的分析我们输入先采用string存储然后换成int数字并且按照数组下标的低位存储数值低位存储数值。
2.1 第一步
利用for循环遍历两个string字符串将其转换为对应的数字即a[i]-0b[i]-0进行减法运算我们确保A-B一定是AB这样方便计算如果BA我们只需要先输出-然后再计算B-A即可。
2.2 第二步
在for循环做减法时当iB.size()时每位值为A[i]-B[i]否则为A[i]。我们用t保存每位值相减后的借位第一次t0后面的每次当i时如果A[i]-B[i]0那么t1因为A[i]不够减需要向i1借位。例如32-13第一位tA[i]-B[i]-t2-3-0-1那么在个位需要保留的就是1A的十位上需要借位1t1然后tA[i]-B[i]-t3-1-11那么在十位需要保留的就是1百位上借位为0也就是t0i之后for循环结束因为在做减法时我们保证了AB那么A和B的最高位相减不会有借位我们需要在for循环结束之后不用补上但是在减法里面我们需要注意前导0比如16-16按照计算之后我们可以知道C里面存储的是00我们只需要保存一个0即可
3 代码
#includeiostream
#includevectorusing namespace std;
typedef long long LL;
const int N 1e5 10;//A B
bool cmp(vectorint A,vectorint B) {if(A.size() ! B.size()) return A.size()B.size();for(int i A.size(); i 0; i --) {if(A[i]!B[i]) return A[i]B[i];}return true;
}//C A - B , A 0 B 0
vectorint sub(vectorint A,vectorint B) {//保证A B if(!cmp(A,B)) {cout-;return sub(B,A);}vectorint C;int t 0;for(int i 0; i A.size(); i ) {t A[i] - t;if(i B.size()){t t - B[i];}if(t 0){C.push_back((t 10) % 10);t 1;}else{C.push_back(t % 10);t 0;}}//***记得去前导 0 while(C.size()1C.back() 0) {C.pop_back();}return C;
}
/*
834759941806152327900303151940196336060166992323381793006569112355455417182275047723716863558023198812556660965034876453196343663912966691993179332101329457072368130838432382442268056736351699000531533905891383548143212225860594411852986342939876618040011587608495448302207348447231253749252393529480791364963334998240618542705610316034216640260057315992222960153236561529337492196200456790971074681689375240113760172920200875086339547064832250693720175733336019433955946578365398845698054072342
1730212895609293780968781134422638013529337293953691202590416001015768176027398863777824489704339557737408048293638085241389042173942253145158882643543317299641617721453243716470035888718649999433851361288450883586077443742282144148770165505395776302856007672738840600408025145144269621804651639658798526865013172504028693729820255215825318827715895274406426858072321951569289515588456319694750151164168327105512059938690032122373175061408639335004407082357709386204929019847
*/
int main() {string a,b;cinab;//a 123456vectorint 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);}vectorint C sub(A,B);for(int i C.size() - 1 ; i 0 ; i --) {coutC[i];}return 0;
}