日常记录(c语言)--字符串实现大整数加法-创新互联

运行环境:CentOs 64位--vim

创新互联是一家专注于网站设计制作、成都做网站与策划设计,港口网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:港口等地区。港口做网站价格咨询:13518219792

 最近在看《剑指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*)函数将字符串中的非数字字符去掉。当然此算法肯定还可以优化,不过小白的我目前就先记录到这里,希望大家有什么好的方法能告诉我,我一定会虚心尝试的。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:日常记录(c语言)--字符串实现大整数加法-创新互联
文章网址:http://myzitong.com/article/dhgpee.html