最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)高精度的加法

 更新時間:2021年05月03日 11:25:34   作者:奮斗的龍貓  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)高精度的加法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)高精度的加法,供大家參考,具體內(nèi)容如下

由鍵盤輸入兩個位數(shù)很長的整數(shù)(一行一個,最多不超過80位),試計算并輸出這兩個數(shù)的和。

輸入樣例

1234567890123456789353534532453453453434534
987654321098765324534534534534532

輸出樣例

1234567891111111110452299856987987987969066

解題思路:

由于一個普通的變量不能保存十多位長的整數(shù),所以通過數(shù)組表示最后的運算結(jié)果,并且每一個下標(biāo)對應(yīng)運算結(jié)果的一位數(shù)。
1、定義兩個字符數(shù)組,分別表示要進(jìn)行加法運算的兩個數(shù)字。由于在C語言中,沒有專門的字符串變量,沒有string類型,通常就用一個字符數(shù)組來存放一個字符串。此時需要注意的是,下面進(jìn)行各個數(shù)位的運算的時候,需要將對應(yīng)的字符轉(zhuǎn)成對應(yīng)的數(shù)字。
2、定義一個整形數(shù)組,用來存放運算結(jié)果的各個數(shù)字。同時定義之后,需要將這個數(shù)組進(jìn)行初始化,將其全部賦值為0。如果沒有進(jìn)行初始化的話,那么就會容易出錯,讀取對應(yīng)的下標(biāo)的值并不是我們以為的是0。

#include<stdio.h>
int main(){
  int arr[10];//定義一個長度為10的數(shù)組,并沒有進(jìn)行初始化
  int i;
  for(i = 0; i < 10; i++)
    printf("%d ",arr[i]);
  return 0;
}

運算結(jié)果如下圖:

很明顯,這里只是定義一個數(shù)組,讀取元素的值都是垃圾值,并不是我們以為,數(shù)組自己會初始化為0.所以我們需要對數(shù)組進(jìn)行初始化,從而使得各個數(shù)組的值為0。這里可以通過不完全初始化,即int arr[10] = {0,0},將前2項初始化為0,后面才會自動為0,從而使得各個值都是0,當(dāng)然也可以通過循環(huán)遍歷每一個值,從而對每一個元素賦值為0,從而使得每一個元素的初始值為0。

#include<stdio.h>
int main(){
  int arr[10] = {0};//不完全初始化,將第一項初始化為0,后面的自動初始化為0
  int i;
  for(i = 0; i < 10; i++)
    printf("%d ",arr[i]);
  return 0;
}

對應(yīng)的結(jié)果:

3、將上面的兩個字符數(shù)組進(jìn)行倒序,從而獲得它的逆序。因為我們進(jìn)行運算的時候首先是計算個位上的,然后才是十位、百位…(獲取對應(yīng)的逆序,類似于證明回文串的用法)

void reverse(char num[],int len){
  int i;
  char ch;
  for(i = 0; i < len/2; i++){
    ch = num[i];
    num[i] = num[len - 1 -i];
    num[len - i - 1] = ch;
  }
}

4、從左到右分別遍歷兩個字符數(shù)組,然后進(jìn)行加法運算。此時需要注意的是將遍歷得到的字符都轉(zhuǎn)成對應(yīng)的整形數(shù)字,然后才可以進(jìn)行加法運算。同時考慮到他們進(jìn)行運算之后的和大于等于10的情況,如果大與等于10,那么當(dāng)前的下標(biāo)對應(yīng)的值應(yīng)該是原來的值%10,同時需要進(jìn)1。
5、遍歷完之后,還需要考慮最高位是否為0的情況,如果高位是0,那么就將這個高位去掉,否則不用去掉。

完整的代碼:

/*
由鍵盤輸入兩個位數(shù)很長的整數(shù)(一行一個,最多不超過80位),試計算并輸出這兩個數(shù)的和。
輸入樣例
1234567890123456789353534532453453453434534
987654321098765324534534534534532

輸出樣例
1234567891111111110452299856987987987969066
*/
#include<stdio.h>
#include<string.h>
#define N 81
void reverse(char num[],int len);//函數(shù)原型聲明
int main(){
  char num1[N],num2[N],ch;
  int num3[100],n1,n2;
  int len1,len2,max,i;
  gets(num1);
  gets(num2);//輸入兩個數(shù)字
  //分別統(tǒng)計兩個數(shù)字的長度
  len1 = strlen(num1);
  len2 = strlen(num2);
  //通過循環(huán)遍歷完全初始化num3,當(dāng)然也可以不完全初始化,后面的值才會自動初始化為0
  for(i = 0; i < N * 2; i++){
    num3[i] = 0;
  }
  max = len1 > len2? len1 : len2;//獲取兩個字符串中最大長度
  //獲取字符串的倒序
  reverse(num1,len1);
  reverse(num2,len2);
  //進(jìn)行高精度的運算
  for(i = 0; i < max; i++){
  /*
  如果這個字符數(shù)組已經(jīng)遍歷完了,那么對應(yīng)的值'\0',自動結(jié)束標(biāo)志,
  所以需要將它對應(yīng)的字符賦值為'0',這樣下面減去'0'是得到的數(shù)字才是0,否則
  就會出現(xiàn)錯誤
  */
    if(i >= len2)
        num2[i] = '0';
    if(i >= len1)
        num1[i] = '0';
    n1 = num1[i] - '0';//獲取對應(yīng)的字符的數(shù)字
    n2 = num2[i] - '0';
    num3[i] += n1 + n2;
    num3[i + 1] = num3[i] / 10;//表示進(jìn)位
    num3[i] = num3[i] % 10;//考慮到進(jìn)行加法運算后他們的和大于10的情況,所以這里是%10
  }
  if(num3[i] == 0)//去除高位
    i--;
  for(; i>=0;i--)//從左往右遍歷,從而得到運算結(jié)果
    printf("%d",num3[i]);
  return 0;
}
//獲得字符的逆序
void reverse(char num[],int len){
  int i;
  char ch;
  for(i = 0; i < len/2; i++){
    ch = num[i];
    num[i] = num[len - 1 -i];
    num[len - i - 1] = ch;
  }
}

對應(yīng)的結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言內(nèi)存的動態(tài)分配比較malloc和realloc的區(qū)別

    C語言內(nèi)存的動態(tài)分配比較malloc和realloc的區(qū)別

    這篇文章主要介紹了C語言內(nèi)存的動態(tài)分配比較malloc和realloc的區(qū)別,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是本文的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++移動語義介紹與使用講解

    C++移動語義介紹與使用講解

    首先,移動語義和完美轉(zhuǎn)發(fā)這兩個概念是在C++的模板編程的基礎(chǔ)上,新增的特性,主要是配合模板來使用。本篇會從C++的值類型,到移動拷貝與移動賦值來理解移動語義與完美轉(zhuǎn)發(fā)
    2022-09-09
  • C++ static詳解,類中的static用法說明

    C++ static詳解,類中的static用法說明

    這篇文章主要介紹了C++ static詳解,類中的static用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MongoDB?C?驅(qū)動程序安裝(libmongoc)?和?BSON?庫(libbson)方法

    MongoDB?C?驅(qū)動程序安裝(libmongoc)?和?BSON?庫(libbson)方法

    這篇文章主要介紹了安裝?MongoDB?C?驅(qū)動程序?(libmongoc)?和?BSON?庫?(libbson),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Qt實現(xiàn)Slider滑塊條組件的示例代碼

    Qt實現(xiàn)Slider滑塊條組件的示例代碼

    在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,本文主要介紹了Qt實現(xiàn)Slider滑塊條組件的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 關(guān)于PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題及解決方法

    關(guān)于PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題及解決方法

    這篇文章主要介紹了PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C++如何在變量前面加#

    C++如何在變量前面加#

    這篇文章主要介紹了C++如何在變量前面加#問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++深入講解哈夫曼樹

    C++深入講解哈夫曼樹

    給定N個權(quán)值作為N個葉子結(jié)點,構(gòu)造一棵二叉樹,若該樹的帶權(quán)路徑長度達(dá)到最小,稱這樣的二叉樹為最優(yōu)二叉樹,也稱為哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權(quán)路徑長度最短的樹,權(quán)值較大的結(jié)點離根較近
    2022-05-05
  • 手把手帶你學(xué)習(xí)C++的運算符

    手把手帶你學(xué)習(xí)C++的運算符

    這篇文章主要為大家介紹了C++運算符,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11
  • 詳解C++字符串常用操作函數(shù)(查找、插入、截取、刪除等)

    詳解C++字符串常用操作函數(shù)(查找、插入、截取、刪除等)

    這篇文章主要介紹了C++字符串常用操作函數(shù)(查找、插入、截取、刪除等),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論

利辛县| 文昌市| 城步| 孟村| 屏南县| 天门市| 瑞昌市| 永德县| 丰原市| 大余县| 兴仁县| 高邮市| 赤水市| 故城县| 牟定县| 包头市| 阳信县| 阳泉市| 南平市| 包头市| 汕尾市| 北川| 陆川县| 五台县| 娱乐| 乌什县| 泸西县| 额尔古纳市| 普兰县| 磴口县| 资溪县| 团风县| 子洲县| 凤城市| 郁南县| 新宾| 江源县| 诸暨市| 广德县| 辽阳市| 沈阳市|