c++實現(xiàn)高精度加法
最近遇到一個c++實現(xiàn)高精度加法的問題,高精度問題往往十復(fù)雜但發(fā)現(xiàn)其中的規(guī)律后發(fā)現(xiàn)并沒有那么復(fù)雜,這里我實現(xiàn)了一個整數(shù)的高精度加法,主要需要注意以下幾點:
1:將所需輸入的數(shù)據(jù)以字符數(shù)組的形式輸入,建立字符數(shù)組,建立相應(yīng)的整數(shù)數(shù)組,然后一一映射,以此來實現(xiàn)數(shù)據(jù)的輸入,需要注意的是,當(dāng)實現(xiàn)字符向數(shù)字映射時,應(yīng)該減去相應(yīng)的ASCII偏移值,即48。

2:為了模擬我們在紙上手算的進(jìn)位模擬運算,我們將字符數(shù)組反向填入整數(shù)數(shù)組,上圖的后幾行代碼實現(xiàn)了這個操作。
3:實現(xiàn)進(jìn)位加法,這是整個代碼的核心部分,需要讀者細(xì)細(xì)體會,認(rèn)真揣摩,往往需要反復(fù)思考,容易遺忘

4:反向輸出數(shù)據(jù)。因為我們的加法是將數(shù)組反置,然后由左到右想加的,加完后,個數(shù)位在左邊,所以,需要反向輸出

以下是全部代碼:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a1[100],b1[100];
int a[100],b[100],c[100];
int a1_len,b1_len,lenc,i,x;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
gets(a1);
gets(b1); //輸入加數(shù)與被加數(shù)
a1_len=strlen(a1);
b1_len=strlen(b1);
for (i=0;i<=a1_len-1;i++)
{
a[a1_len-i]=a1[i]-48; //將操作數(shù)放入a數(shù)組
}
for (i=0;i<=b1_len-1;i++)
{
b[b1_len-i]=b1[i]-48; //將操作數(shù)放入b數(shù)組
}
lenc =1;
x=0;
while(lenc <=a1_len || lenc <=b1_len)
{
c[lenc]=a[lenc]+b[lenc]+x; //兩數(shù)相加
x=c[lenc]/10; //要進(jìn)的位
c[lenc]=c[lenc]%10; //進(jìn)位后的數(shù)
lenc++; //數(shù)組下標(biāo)加1
}
c[lenc]=x;
if (c[lenc]==0)
{
lenc--; //處理最高進(jìn)位
}
for (i=lenc;i>=1;i--)
{
cout<<c[i]; //輸出結(jié)果
}
cout<<endl;
return 0;
}
以上就是本文給大家分享的代碼了,希望大家能夠喜歡
相關(guān)文章
VC通過托盤圖標(biāo)得到該所屬進(jìn)程的實現(xiàn)代碼
這篇文章主要介紹了VC通過托盤圖標(biāo)得到該所屬進(jìn)程的實現(xiàn)代碼,為了方便大家使用特將多個代碼分享給大家,需要的朋友可以參考下2021-10-10
C/C++?string.h庫中memcpy()和memmove()的使用
memcpy與memmove的目的都是將N個字節(jié)的源內(nèi)存地址的內(nèi)容拷貝到目標(biāo)內(nèi)存地址中,本文主要介紹了C/C++?string.h庫中memcpy()和memmove()的使用,感興趣的可以了解一下2023-12-12

