C語(yǔ)言實(shí)現(xiàn)高精度加法
本篇為高精度加法的計(jì)算,接下來(lái)我還會(huì)去寫(xiě)高精度乘法的計(jì)算。
一、高精度運(yùn)算的概念
高精度運(yùn)算其實(shí)就是參與運(yùn)算的數(shù)完全超出基本數(shù)據(jù)類(lèi)型所能表示的范圍的運(yùn)算(例如int型范圍就是 - 2147483648 ~+ 2147483647)
所以如果想求較大數(shù)的話就要創(chuàng)建新的數(shù)據(jù)類(lèi)型
二、數(shù)據(jù)類(lèi)型的選取
我選擇的是int型數(shù)組,這樣比較便于計(jì)算和理解
三、代碼
其中a和b我是通過(guò)隨機(jī)數(shù)來(lái)賦值
//author summer_awn
//date 2017/6/20
#include<iostream>
#include<time.h>
#define lenth_a 200
#define lenth_b 200
using namespace std;
//計(jì)算a+b
void main() {
srand((unsigned)time(NULL));
int * a = new int[lenth_a];//數(shù)組a ******
for (int i = 0; i < lenth_a; ++i) {
a[i] = rand() % 10;
}
cout << "a=";
for (int i = lenth_a - 1; i >= 0; --i) {//輸出a
cout << a[i];
}
cout << endl;
cout << endl;
int * b = new int[lenth_b];//數(shù)組b ******
for (int i = 0; i < lenth_a; ++i) {
b[i] = rand() % 10;
}
cout << "b=";
for (int i = lenth_b - 1; i >= 0; --i) {//輸出b
cout << b[i];
}
cout << endl;
cout << endl;
int lenth_result;//結(jié)果的長(zhǎng)度en
if (lenth_a > lenth_b) lenth_result = lenth_a + 1;
else lenth_result = lenth_b + 1;//通過(guò)一個(gè)判斷來(lái)確定結(jié)果的長(zhǎng)度
int * a2 = new int[lenth_result];//a2***********
int * b2 = new int[lenth_result];//b2***********
memcpy(a2, a, sizeof(int)*lenth_a);//
memset(a2 + lenth_a, 0, sizeof(int)*(lenth_result - lenth_a));
memcpy(b2, b, sizeof(int)*lenth_b);
memset(b2 + lenth_b, 0, sizeof(int)*(lenth_result - lenth_b));
delete(a);
delete(b);
int * result = new int[lenth_result];//result*********
result[0] = a2[0] + b2[0];
for (int i = 1; i < lenth_result - 1; ++i) {
result[i] = a2[i] + b2[i] + result[i - 1] / 10;
result[i - 1] = result[i - 1] % 10;
}
result[lenth_result - 1] = result[lenth_result - 2] / 10;
result[lenth_result - 2] = result[lenth_result - 2] % 10;
delete(a2);
delete(b2);
cout << "結(jié)果=";
for (int i = lenth_result - 1; i >= 0; --i) {
cout << result[i];
}
cout << endl;
system("pause");
delete(result);
}
四、結(jié)果
結(jié)果有截圖,未驗(yàn)證(因?yàn)閼校?/p>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用C語(yǔ)言實(shí)踐OOP,以及new,delete的深入分析
本篇文章是對(duì)用C語(yǔ)言實(shí)踐OOP,new,delete進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Visual Studio C++指針靠前靠后的問(wèn)題全面解析
這篇文章主要介紹了Visual Studio C++指針靠前靠后的問(wèn)題全面解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Qt+Quick實(shí)現(xiàn)播放音樂(lè)和視頻的開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了如何利用Qt+Quick實(shí)現(xiàn)播放音樂(lè)和視頻的開(kāi)發(fā),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
牛頓迭代法求多項(xiàng)式在1.5附近的值2*x的3次冪--4x平方+3*x-6=0的實(shí)現(xiàn)代碼
以下代碼是使用了牛頓迭代法求多項(xiàng)式在1.5附近的值 2*x的3次冪 - 4x的平方 + 3*x -6=0的實(shí)例。需要的朋友參考下吧2013-05-05
深入C++浮點(diǎn)數(shù)無(wú)效值定義與判定的解決辦法
本篇文章是對(duì)C++中浮點(diǎn)數(shù)無(wú)效值定義與判定進(jìn)行了介紹,需要的朋友參考下2013-05-05

