a-2b

发布时间 2023-09-19 14:05:50作者: freedragon

 

a-2b
 

描述

 

输入两个高精度数a和b,求a-2b的值。

 

输入

 

输入两行,第一行是被减数a,第二行是减数b(a>2b并且a,2b的位数不同且不存在借位,且b+b不存在进位)。

 

输出

 

一行,即所求的差。

 

输入样例 1 

888888888888888888888888
44444444

输出样例 1

888888888888888800000000

 

 

 

 

#include <iostream>  
#include <string>  
using namespace std;  
  
int main() {  
    string a, b;  
    cin >> a >> b;  
    int len_a = a.length(), len_b = b.length();  
    int diff = len_a - len_b; // a-2b的位数差  
    string ans = a.substr(0, diff); // 截取a的前diff位  
    for (int i = 0; i < len_b; i++) {  
        int sub = (a[i+diff] - '0') - 2 * (b[i] - '0'); // 计算每一位的差  
        if (sub < 0) { // 需要借位  
            sub += 10;  
            ans[i]--; // 借位操作  
        }  
        ans += to_string(sub); // 拼接差值  
    }  
    cout << ans << endl;  
    return 0;  
}

 

 

#include<bits/stdc++.h>
using namespace std;
int main(){
    char a1[1001]={},a2[1001]={};
    int b1[1001]={},b2[1001]={},b3[1001]={};
    cin>>a1>>a2;
    int len1=strlen(a1);
    int len2=strlen(a2);
    if(len2>len1 || (len2==len1) && strcmp(a1,a2)<0){
        swap(a1,a2);
        swap(len1,len2);
        cout<<"-";
    }
    for(int i=0;i<len1;i++){
        b1[len1-1-i]=a1[i]-'0';
    }
    for(int i=0;i<len2;i++){
        b2[len2-1-i]=a2[i]-'0';
    }
    int lenc=len1;
    for(int i=0;i<lenc;i++){
        if(b1[i]<b2[i]){
            b1[i]+=10;
            b1[i+1]--;
        }
        
        b3[i]=b1[i]-b2[i];
    }
    while(b3[lenc-1]==0){
        lenc--;
        if(lenc==1){
            break;
        }
    }
    for(int i=lenc-1;i>=0;i--){
        cout<< b3[i] ;
    }
    return 0;
}