日常记录(c语言)--字符串实现大整数加法
运行环境:CentOs 64位--vim
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站制作、天全网络推广、重庆小程序开发公司、天全网络营销、天全企业策划、天全品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供天全建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
最近在看《剑指offer》这本书,看了前面的关于面试的能力,顿时觉得自己的编程能力差得好远。
可能我对鲁棒的代码理解还不深,我觉得鲁棒应该就是代码可以应对各种不同的输入,都能有相应的处理,并给出相应的输出。
下面是我看了之后对之前做过的大整数加法做了一些完善,之前的只能实现对纯数字字符进行求和,甚至连对空指针的处理都没有,好惭愧。我会用注释来记录自己对此算法的理解。
1 #include
2 #include
3 int Sum(char *a,char *b,char *sum);//求和
4 void Inverse(char *s);//将字符串逆置,以便求和
5
6 int Change(char *r) //去掉字符串中的非数字字符
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调试后知道的。数字字符减'0'后就
44 else //相当于字符变为整型可以和整型运算,
45 t = a[i] - '0'+ b[i] - '0' + acc;//加'0'又把数字变为字符。
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 } 总结:算法思路就是先将字符串逆置,便于后面求和,为了防止字符串会出现非数字字符,可以先调用Change(char*)函数将字符串中的非数字字符去掉。当然此算法肯定还可以优化,不过小白的我目前就先记录到这里,希望大家有什么好的方法能告诉我,我一定会虚心尝试的。
当前题目:日常记录(c语言)--字符串实现大整数加法
浏览地址:http://scyanting.com/article/jjcsho.html