日常記錄(c語言)--字符串實現(xiàn)大整數(shù)加法-創(chuàng)新互聯(lián)

運行環(huán)境:CentOs 64位--vim

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計制作、成都做網(wǎng)站與策劃設(shè)計,港口網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:港口等地區(qū)。港口做網(wǎng)站價格咨詢:13518219792

 最近在看《劍指offer》這本書,看了前面的關(guān)于面試的能力,頓時覺得自己的編程能力差得好遠(yuǎn)。

可能我對魯棒的代碼理解還不深,我覺得魯棒應(yīng)該就是代碼可以應(yīng)對各種不同的輸入,都能有相應(yīng)的處理,并給出相應(yīng)的輸出。

 下面是我看了之后對之前做過的大整數(shù)加法做了一些完善,之前的只能實現(xiàn)對純數(shù)字字符進行求和,甚至連對空指針的處理都沒有,好慚愧。我會用注釋來記錄自己對此算法的理解。

 1 #include <stdio.h>

 2 #include <string.h>

 3 int Sum(char *a,char *b,char *sum);//求和

 4 void Inverse(char *s);//將字符串逆置,以便求和

 5

 6 int Change(char *r)    //去掉字符串中的非數(shù)字字符

 7 {

 8   int i = 0,j;

 9   if(r == NULL)

 10   {  printf("r is NULL!\n");

 11     return -1;

 12   }

 13   while(i < strlen(r))

 14   {

 15     if(r[i] <= '9' && r[i] >= '0')

 16       i++;

 17     else

 18       for(j = i;j < strlen(r);j++)

 19         r[j] = r[j+1];

 20   }

 21   printf("Change = %s\n", r);

 22 }

 23

 24 int Sum(char* a,char* b,char* sum)

 25 {

 26   if(a == NULL || b == NULL){

 27     printf("a or b is NULL!\n");

 28     return -1;

 29   }

 30   int m=strlen(a);

 31   int n=strlen(b);

 32   printf("m = %d,n = %d\n",m,n);

 33   int acc = 0;

 34   int t,i;

 35   Inverse(a);

 36   Inverse(b);

 37   printf("a = %s,b = %s\n",a,b);

 38   for(i = 0;i < m || i < n;i++)

 39   {

 40     if(i >= m)             //我之前并不知道這里為何要減'0',后來

 41       t = b[i] - '0' + acc;    //查了ASCII碼才知道。字符串運算的是

 42     else if(i >= n)         //ASCII碼中字符對應(yīng)的值,這是我通過

 43       t = a[i] - '0'+ acc;    //GDB調(diào)試后知道的。數(shù)字字符減'0'后就

 44     else                //相當(dāng)于字符變?yōu)檎涂梢院驼瓦\算,

 45       t = a[i] - '0'+ b[i] - '0' + acc;//加'0'又把數(shù)字變?yōu)樽址?/p>

 46     sum[i] = t % 10 + '0';

 47     if(t > 9)

 48       acc = 1;

 49     else

 50       acc = 0;

 51   }

 52   if(acc == 1)

 53     sum[i++] = '1';

 54   sum[i]='\0';

 55   Inverse(sum);

 56 }

 57

 58 void Inverse(char *s)

 59 {

 60   int i;

 61   int length;

 62   char t;

 63   length=strlen(s);

 64   for(i=0;i<length-i-1;i++)

 65   {

 66     t=s[i];

 67     s[i]=s[length-i-1];

 68     s[length-i-1]=t;

 69   }

 70 }

 71

 72 int main()

 73 {

 74   char a[100]="94jg987";

 75   char b[100]="9t5h724";

 76   char sum[100];

 77   printf("a=%s,b=%s\n",a,b);

 78   Change(a);

 79   Change(b);

 80   Sum(a,b,sum);

 81   printf("sum=%s\n",sum);

 82   return 0;

 83 }

    總結(jié):算法思路就是先將字符串逆置,便于后面求和,為了防止字符串會出現(xiàn)非數(shù)字字符,可以先調(diào)用Change(char*)函數(shù)將字符串中的非數(shù)字字符去掉。當(dāng)然此算法肯定還可以優(yōu)化,不過小白的我目前就先記錄到這里,希望大家有什么好的方法能告訴我,我一定會虛心嘗試的。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

標(biāo)題名稱:日常記錄(c語言)--字符串實現(xiàn)大整數(shù)加法-創(chuàng)新互聯(lián)
文章源于:http://muchs.cn/article44/dhgpee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、移動網(wǎng)站建設(shè)、建站公司品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)