a-2b

 

a-2b
 

描述

 

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

 

输入

 

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

 

输出

 

一行,即所求的差。

 

输入样例 1 

888888888888888888888888
44444444

输出样例 1

888888888888888800000000

 

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char a1[256] = {},b1[256] = {};
    int a[256] = {},b[256] = {},c[256] = {},lena,lenb,i;
    int lenc = 0;
    cin >> a1 >> b1;
    lena = strlen(a1);
    lenb = strlen(b1);
    for (i = 0; i <= lena-1; i ++) {
        a[lena-i-1] = a1[i] - 48;
    }
    for (i = 0; i <= lenb-1; i ++) {
        b[lenb-i-1] = b1[i] - 48;
    }
    while (lenc<lena||lenc<lenb) {
        c[lenc] = a[lenc] - b[lenc] - b[lenc];
        lenc ++;
    }
    while ((c[lenc-1] == 0)&&(lenc > 1)) {
        lenc--;
    }    
    for (i = lenc-1;i >= 0;i --) {
        cout << c[i];
    }        
    return 0;
}

 

 

"#include <iostream>": "包含C++标准输入输出流库。",
"#include <cstring>": "包含C++字符串操作库。",
"using namespace std;": "使用C++标准命名空间,这样就可以直接使用标准库中的名字,例如cin, cout等。",
"int main() {": "程序的主函数开始。",
"char a1[256] = {},b1[256] = {};": "声明两个字符数组a1和b1,长度均为256,并初始化为空字符串。",
"int a[256] = {},b[256] = {},c[256] = {},lena,lenb,i;": "声明三个整数数组a, b和c,长度均为256,并初始化为0。同时声明了三个整数变量lena, lenb和i。",
"int lenc = 0;": "声明一个整数变量lenc并初始化为0,用于记录数组c的长度。",
"cin >> a1 >> b1;": "从标准输入读取两个字符串,分别赋值给a1和b1。",
"lena = strlen(a1);": "计算字符串a1的长度并赋值给lena。",
"lenb = strlen(b1);": "计算字符串b1的长度并赋值给lenb。",
"for (i = 0; i <= lena-1; i ++) { a[lena-i-1] = a1[i] - 48; }": "将字符串a1的每个字符(按逆序)转换为对应的数字,并存储在数组a中。",
"for (i = 0; i <= lenb-1; i ++) { b[lenb-i-1] = b1[i] - 48; }": "将字符串b1的每个字符(按逆序)转换为对应的数字,并存储在数组b中。",
"while (lenc<lena||lenc<lenb) { c[lenc] = a[lenc] - b[lenc] - b[lenc]; lenc ++; }": "执行大数减法,将数组a和b对应位置的数字相减,并将结果存储在数组c中。当lenc小于a或b的长度时继续执行。",
"while ((c[lenc-1] == 0)&&(lenc > 1)) { lenc--; }": "去掉结果数组c前导的0,如果最后一位是0并且lenc大于1,则将lenc减1。",
"for (i = lenc-1;i >= 0;i --) { cout << c[i]; }": "逆序输出数组c的内容,即输出大数减法的结果。",
"return 0;": "主函数返回0,表示程序正常结束。",
"}": "主函数结束。"

 

 

 

 

#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;
}

 

posted @ 2023-09-19 14:05  freedragon  阅读(33)  评论(0编辑  收藏  举报