真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

日常記錄(c語(yǔ)言)--字符串實(shí)現(xiàn)大整數(shù)加法

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

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、天全網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)公司、天全網(wǎng)絡(luò)營(yíng)銷、天全企業(yè)策劃、天全品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供天全建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

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

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

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

  1 #include

  2 #include

  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',后來(lái)

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

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

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

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

 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

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


分享標(biāo)題:日常記錄(c語(yǔ)言)--字符串實(shí)現(xiàn)大整數(shù)加法
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jjcsho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部