運行環(huán)境:CentOs 64位--vim
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站制作、天全網(wǎng)絡推廣、重慶小程序開發(fā)公司、天全網(wǎng)絡營銷、天全企業(yè)策劃、天全品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供天全建站搭建服務,24小時服務熱線:18982081108,官方網(wǎng)址:bm7419.com
最近在看《劍指offer》這本書,看了前面的關(guān)于面試的能力,頓時覺得自己的編程能力差得好遠。
可能我對魯棒的代碼理解還不深,我覺得魯棒應該就是代碼可以應對各種不同的輸入,都能有相應的處理,并給出相應的輸出。
下面是我看了之后對之前做過的大整數(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碼中字符對應的值,這是我通過
43 t = a[i] - '0'+ acc; //GDB調(diào)試后知道的。數(shù)字字符減'0'后就
44 else //相當于字符變?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ù)字字符去掉。當然此算法肯定還可以優(yōu)化,不過小白的我目前就先記錄到這里,希望大家有什么好的方法能告訴我,我一定會虛心嘗試的。
分享文章:日常記錄(c語言)--字符串實現(xiàn)大整數(shù)加法
網(wǎng)址分享:http://bm7419.com/article40/jjcsho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、建站公司、用戶體驗、軟件開發(fā)、網(wǎng)站設(shè)計、搜索引擎優(yōu)化
聲明:本網(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)