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