两个超出int范围的数字相加——c语言

原文链接:https://blog.csdn.net/huijiaaa1/article/details/79736375

上学期在学校参加一个比赛,今晚偶尔想起上学期比赛出的比较简单的一道题。就晒出来看看。今晚再敲了一边代码 。15分钟搞定... 什么...这么简单的我竟然用了十五分钟。。哈哈 当然还要写注释啊 辛苦。。

[cpp]  view plain  copy
  1. #include<stdio.h>  
  2. #include<string.h>  
  3. void fun(char *p,char *s)  
  4. {  
  5.     //首先强调 两个数字加的时候是从后往前加。即字符串从后到前移动...  
  6.    int a=strlen(p);  
  7.    int b=strlen(s);  
  8.    //flag为判断相加后前面的数字是否会大于9的下标...因为大于9就要逐渐往前位进1  
  9.    int flag=0;  
  10.    if(a>b)//如果p的数字比s的数字长。。  
  11.    {  
  12.        while(b!=0)//当s没有到头的时候 循环一直往前走   
  13.        {  
  14.              p[--a]+=s[--b]-48;//把结果存到数字长的那个数组里。 这句代码的意义是:算出相加后的数字的ascii值  
  15.              flag=a;        //flag保持标志位下标最新值  
  16.              while(p[flag]>'9'&&flag!=0)//如果加了后进位前面数字大于9 一直往前加  
  17.              {  
  18.                    
  19.                   
  20.                     p[flag]=p[flag]-58+'0'//数字大于9的话,那么就减去这个差值 。至于为什么减58,因为没有10的ascii码,所以用58代替  
  21.                     p[--flag]+=1;  
  22.                    
  23.              }  
  24.        }  
  25.   
  26.    }  
  27.    else  
  28.    {//如果第二个数字长度大于等于第一个数字  
  29.      while(a!=0)  
  30.        {  
  31.              s[--b]+=p[--a]-48;  
  32.              flag=b;  
  33.              while(s[flag]>'9'&&flag!=0)  
  34.              {  
  35.                    
  36.                     s[flag]=s[flag]-58+'0';   
  37.                     s[--flag]+=1;   
  38.   
  39.              }  
  40.        }//前面这些套路跟上一个一样  
  41.     for(int c=0;c<(int)strlen(s);c++)//这个for循环时把s指向的数组赋值给p 为什么要这么做?因为最后输出的结果时p数组。  
  42.     {  
  43.         p[c]=s[c];  
  44.     }  
  45.     p[c]='\0';//千万不要忘记赋结束符了。  
  46.    }  
  47.     
  48. }  
  49. int main(char args[])  
  50. {  
  51.     while(1)  
  52.     {  
  53.         char one[20],two[20],*p=one,*s=two;  
  54.         one[0]=two[0]='0';//考虑到数字要进位,所以把数组第一位都赋值为0   
  55.         puts("请输入第一个数字:");  
  56.         scanf("%s",p+1);//从数组的下标为1的地址输入  
  57.         puts("请输入第二个数字:");  
  58.         scanf("%s",s+1);  
  59.         fun(one,two);  
  60.         puts("相加结果:");  
  61.         if(one[0]=='0')//如果数组第一位是0,那么说明没有进位,则从下标为1进行输出数组  
  62.             puts(p+1);  
  63.         else  
  64.         puts(p);  
  65.     }  
  66.   
  67.     return 0;  
  68.   
  69. }  


运行结果:


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huijiaaa1/article/details/79736375
个人分类:  c指针

猜你喜欢

转载自blog.csdn.net/liangjiubujiu/article/details/80348274