關於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