C++中資料存盤的范圍是有限的,最長的longlong型最大只能存盤2^63-1,如果要是需要存盤更大的數就只能使用陣列了,這樣存盤的數的運算需要另外撰寫程式,
這里介紹高精度乘法
被除數是高精度數,除數是單精度,
首先,需要先讀入資料,被除數當一個字串讀入,再存盤到一個整形陣列之中,逐位減‘0’,由于除法就是先從最高位開始,就不需要反序了,除數當一個整形數讀入即可,
被除數從最高位開始分別去除除數,如果除不了,則將此位的數乘十,累計到下一位;如果除的了,將此位的數減去除數乘十,累計到下一位,注意此處的每一位不一定是只有一位的數,因為有前面的累計,
最后,除0,輸出
點擊查看 高精度數的四則運算
代碼
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int N=1e5;
string s;
long long int b;
long long int ans[N],a[N];
int main()
{
cin>>s>>b; //a是被除數 b是除數
int len=s.length();
for(int i=0;i<len;i++)
a[i+1]=s[i]-'0'; //反序存盤
long long int tmp=0; //所有中間的數都用longlong
for(int i=1;i<=len;i++)
{
a[i]+=tmp*10; //累計前面剩的數
ans[i]=a[i]/b; //如果不夠除,因為都是整形數,就是0
tmp=a[i]-ans[i]*b; //計算剩下的數
}
int i;
for(i=1;i<len;i++)
if(ans[i]!=0) //除0
break;
for(;i<=len;i++)
cout<<ans[i]; //輸出
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259465.html
標籤:其他
上一篇:mysql報錯:Can‘t connect to MySQL server on ‘localhost‘ (10061)的解決方案
