1. 程式人生 > >關於C語言大正整數相加的實現

關於C語言大正整數相加的實現

大家好,我是一名剛接觸c語言不久的大一新生,這是我的第一篇部落格:關於大正整數的加法

我們都知道整型變數即使是長整型表示數字的範圍也非常有限,因此我們可以用字元陣列儲存大正整數,然後模擬手工運算實現兩個大整數的加法。
簡單思路為:將兩個大正整數存入字元陣列,然後整體向字元陣列的尾端對齊,然後從後往前進行加法運算,並將結果儲存在第三個字元陣列,然後將前面多餘的’0’處理掉。
程式碼如下:

#include<stdio.h>
#include<string.h>
#define max 100
/*max為我們用到的大正整數的最大位數+1,考慮到字串的最後一個'\0',如這裡我們用的最大位數為99*/
int main() { char a[max],b[max],c[max]; int i,j,k; /*以讀入字串的方式輸入兩個我們需要進行加法運算的兩個大正整數,並實現多組輸入*/ while(scanf("%s%s",a,b)!=EOF){ /*將儲存結果的字元陣列初始化為'0'*/ for(i = 0;i<max-1;i++) c[i] = '0'; c[max-1] = '\0'; /*找到字元陣列a的最後一個字元,然後整體移到字元陣列尾*/ for(i = 0; a[i]; i++); j = i-1
; k = max-2; for(;i<max-1;i++) a[i] = '0'; i = j; for(;i>=0;i--){ a[k] = a[i]; k--; a[i] = '0'; }a[max-1] = '\0'; /*對字元陣列b進行與上相同的操作*/ for(i = 0;b[i];i++); j = i-1; k = max-2; for
(;i<max-1;i++) b[i] = '0'; i = j; for(;i>=0;i--){ b[k] = b[i]; k--; b[i] = '0'; }b[max-1] = '\0'; /*開始進行加法運算*/ for(i = max-2;i>=0;i--){ /*因為我們字元陣列存的每一個元素都是字元而不是數字,因此必須注意+-'0'的細節*/ c[i] = c[i]+a[i]+b[i]-'0'-'0'; j = i; /*進位處理*/ if((c[j]-'0')>9){ c[j] = (c[j] - '0')%10+'0'; c[j-1]++; } } /* 處理前面多餘的'0':找到第一個不是'0'的元素,然後從該位置開始整體向前移並在結尾添上'\0',大正整數相加的結果就出來了*/ for(i = 0;c[i]=='0';i++); j = i; for(k = 0;i<=max-2;i++){ c[k++] = c[i]; c[i] = '0'; }c[max-1-j] = '\0'; printf("%s\n",c); } return 0; } 以上就是我的想法與做法,歡迎大家改進,希望能有用吧。

相關推薦

關於C語言大正整數相加實現

大家好,我是一名剛接觸c語言不久的大一新生,這是我的第一篇部落格:關於大正整數的加法 我們都知道整型變數即使是長整型表示數字的範圍也非常有限,因此我們可以用字元陣列儲存大正整數,然後模擬手工運算實現兩個大整數的加法。 簡單思路為:將兩個大正整數存入字元陣列

2407: C語言習題 整數轉換成字符串

輸出 stat script 代碼 pan center pre bbs tput 2407: C語言習題 整數轉換成字符串 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 917 Solved: 416[Submit][S

C語言:指針實現交換兩個變量的值

實現 urn sign ret 語言 div title void itl 用指針交換兩個變量的值(10分) 題目內容: 用指針交換兩個變量的值 主函數參考: int main( ) { int a,b; scanf("%d%d",&a,&b)

C語言:指針實現輸出梯形字符串

pre () 輸入格式 lec desc clu 字符串 main std 用指針實現,實現過程無需將子串復制到一個新的字符串中。(10分) 題目內容: 用指針實現,實現過程無需將子串復制到一個新的字符串中。 輸入格式: 字符串 輸出格式: 子串 輸入樣例

C語言通過匿名管道實現反彈式CMDShell

隱藏窗口 null proto true 退出程序 沒有 ces 接收數據 erro #pragma comment(lib,"ws2_32.lib") #ifdef _MSC_VER #pragma comment( linker, "/subsystem

快速傅立葉變換FFT的學習筆記一:C語言程式碼的簡單實現

快速傅立葉變換FFT的學習筆記一:C語言程式碼的簡單實現 fft.c #include "math.h" #include "fft.h" void conjugate_complex(int n,complex in[],complex out[]) { int i = 0

C語言_迷宮的實現

#1、單條通路迷宮 實現思路: 程式碼如下: 標頭檔案maze.h #ifndef __MAZE_H__ #define __MAZE_H__ #include <assert.h> #include <stdio.h> #include &l

c語言設計簡單計算器實現加減乘除運算

      編寫程式的目的就是使程式有他應用的地方,編寫一個簡單的計算器來實現我們計算的目的。           利用swich  case 語句和迴圈結構來實現簡單程式的編寫。利用選擇語句來進行輸入的選

c語言 通過指標擬實現strcmp

實現strcmp比較字串的大小除了利用庫函式之外,還可以通過自己對該函式的模擬來實現該函式。 利用函式的呼叫,建立一個my_strcmp,如果兩個字串從頭到尾由第一個字元開始,如果有一個字元在兩個字串中有不同,則比較這兩個字元的大小從而實現字串的大小比較。 在第一個例子中,是利用返回值的不同來獲得

C語言用遞迴實現n^k(不考慮k<0的情況)

#include<stdio.h> #include<stdlib.h> int n_power_k(int n,int k){ if (k == 0) { return 1; } return n*n_power_k(n,k-1)

C語言環形緩衝fifo實現【轉】

  (轉自:https://blog.csdn.net/humanspider1/article/details/80965513) #define BUFFSIZE 1024 * 1024 #define min(x, y) ((x) < (y) ? (x) : (y)

基於C++語言的決策樹實現

   感覺好久都沒有寫過程式了,一直上課沒有時間。最近有點空,然後就寫了下西瓜書中的決策樹的實現。由於本人才疏學淺,採用的實現方式和資料結構可能不合理,沒有考慮程式碼的複雜度和時間複雜度等等,僅寫下自己的實現想法(大神們就打擾了)。該程式是基於C++語言來實現的,演算法就是西瓜書

linux下c語言利用iconv函式實現utf-8轉unicode

    由於專案中需要轉換原生unicode到ascii的功能,本來想的用的是linux或者windows自帶的寬位元組轉成窄位元組的函式,但由於本身使用了apr_iconv庫,所以直接使用庫函式來解決。     期間碰到了庫函式使用一直出錯的問題,一

C語言: 用遞迴實現對字串的逆置

#include <stdio.h> #include <windows.h> /* 用遞迴實現對字串的逆置 */ void Reverse(char* string) { int len = strlen(string); if (strlen(string)

【轉】C語言鄰接表的實現

原文連結:C語言鄰接表的實現 這篇博文的程式碼寫的很好,我就直接合並在一起貼出來了,方便自己使用,至於文章內容有需要可以看上述原文   #define OK 1 #define ERROR 0 #define MVNum 100 #include<stdio.h> #in

c語言用位運算實現兩個數平均數

c語言用位運算實現兩個數平均數 對於十進位制而言,向右移動一位就是除以10, 對於二進位制而言,向右移動一位就是除以2, 對於八進位制而言,向右移動一位就是除以8, 對於十六進位制而言,向右移動一位就是除以16 因為計算機是通過二進位制來計算的,知道這個規律之後我們可以編寫程式碼 int

[原始碼和文件分享]C語言的基於棧實現的表示式求值

一、目的 理解中綴表示式求值的過程 理解中綴轉字尾表示式求值的過程 掌握堆疊的應用 二、問題描述 綴表示式,其中包含括號,加減乘除,乘方等運算,利用中綴表示式,對錶達式分析並求值 入的中綴表示式轉換為字尾形式,顯示字尾形式,並通過後綴形

C語言 ,單鏈表實現佇列(初始化,入隊,出隊,元素個數,隊首元素,是否為空)

單鏈表實現佇列: 連結串列為空的判斷條件:pQueue->pFront==pQueue->pRear或者若結構體中存在數的個數時,判斷pQueue->size==0,即元素個數為0 標頭檔案:佇列.h #pragma once #include<

c語言使用librdkafka庫實現kafka的生產和消費例項

關於librdkafka庫的介紹,可以參考kafka的c/c++高效能客戶端librdkafka簡介,本文使用librdkafka庫來進行kafka的簡單的生產、消費 一、producer librdkafka進行kafka生產操作的大致步驟如下: 1、建立kafka

C語言使用memcpy函式實現兩個數間任意位置的複製操作

  c和c++使用的記憶體拷貝函式,memcpy函式的功能是從源src所指的記憶體地址的起始位置開始拷貝n個位元組到目標dest所指的記憶體地址的起始位置中。   用法:void *memcpy(void *dest, const void *src, size_t n); 舉例:   char tes