1. 程式人生 > 其它 >C++高精度減法

C++高精度減法

技術標籤:作業c++

  1. 超長正整數的減法
    【問題描述】
    編寫程式實現兩個超長正整數(每個最長80位數字)的減法運算。

【輸入形式】

從鍵盤讀入兩個整數,要考慮輸入高位可能為0的情況(如00083)。

  1. 第一行是超長正整數A;
  2. 第二行是超長正整數B;

【輸出形式】
輸出只有一行,是長整數A減去長整數B的運算結果,從高到低依次輸出各位數字。要求:若結果為0,則只輸出一個0;否則輸出的結果的最高位不能為0,並且各位數字緊密輸出。
【輸入樣例】

234098
134098703578230056

【輸出樣例】
-134098703577995958

【樣例說明】
進行兩個正整數減法運算, 234098 -134098703578230056 = -134098703577995958。

【評分標準】
完全正確得20分,每個測試點4分。

我就差個高精度除法沒寫過了在這裡插入圖片描述

#include<bits/stdc++.h>
using namespace std;
char a1[100000],b1[100000];
int a[100000],b[100000],c[100000];
int i,j;
bool cmp(void){
	if(a[0]!=b[0])return a[0]>b[0];
	for(i=0;i<=a[0];i++){
		if(a[a[0]-i]!=b[b[0]-i])return a[a[0]]>b[b[0]];
	}
	return true;
}
void sub(int a[],int b[]
); int main(void){ scanf("%s%s",a1,b1); a[0]=(int)strlen(a1); b[0]=(int)strlen(b1); for(i=1;i<=a[0];i++)a[i]=a1[a[0]-i]-'0'; for(i=1;i<=b[0];i++)b[i]=b1[b[0]-i]-'0'; while(!a[a[0]])a[0]--; while(!b[b[0]])b[0]--; if(cmp())sub(a,b); else {sub(b,a);printf("-");} while(!c[c[0]]&&
c[0]>1)c[0]--; for(j=c[0];j>=1;j--)printf("%d",c[j]); return 0; } void sub(int A[],int B[]){ for(i=1;i<=A[0];i++){ if(A[i]>=B[i])c[i]=A[i]-B[i]; else { A[i+1]--; c[i]=A[i]-B[i]+10; } } c[0]=A[0]; }