大数相加

/*
  Name: 
  Copyright: 
  Author: 
  Date: 24/08/12 16:34
  Description: 
  Reference:   http://blog.csdn.net/tangxianghenggood/article/details/5776629               
*/
#include<stdio.h>
#include<string.h>

int main()
{
    char a[200] = {0};
    char b[200] = {0};        
    int i=0,j=0,k=0;
    int al=0;
    int bl=0;
    int result;
    
    printf("please input a\n");
    while((a[al] = getchar()) != '\n')
    {
     if(a[al] >= '0' && a[al] <= '9')
              {
               a[al] = a[al] - '0';
               al++;      
              }        
              else {
               printf("intput error");
               exit(0);                       
                   }    
    }
    printf("the number a is   ");
    for(i=0;i<al;i++)   printf("%d",a[i]);
    printf("\n");
    
    printf("please input b\n");    
    while((b[bl] = getchar()) != '\n')
    {
     if(b[bl] >= '0' && b[bl] <= '9')
              {
                       b[bl] = b[bl] - '0';
                       bl++;
              }        
              else {
               printf("intput error");
               exit(0);      
                   }    
    }
    printf("the number b is   ");
    for(i=0;i<bl;i++)   printf("%d",b[i]);
    printf("\n");  
        
    if(al >= bl)
    {
          j = al;
          k = bl;
          for(;bl > 0;)
          {
                result = (a[al-1]+b[bl-1])/10;
                a[al-1] = (a[al-1]+b[bl-1])%10;
                al --;
                bl --;
                a[al-1] = a[al-1] + result;
          } 
          if(result > 0)
                    for(;al > 1;)
                    {
                      al --;
                      
                      a[al-1]  += a[al]/10;      
                      a[al] %= 10;
                    } 
                    for(i=0;i<j;i++)   printf("%d",a[i]);    
    }
    else {
          j = al;
          k = bl;
          for(;al > 0;)
          {
                result = (a[al-1]+b[bl-1])/10;
                b[bl-1] = (a[al-1]+b[bl-1])%10;
                al --;
                bl --;
                b[bl-1] = b[bl-1] + result;
          } 
          if(result > 0)
                    for(;bl > 1;)
                    {
                      bl --;
                      
                      b[bl-1]  += b[bl]/10;      
                      b[bl] %= 10;
                    } 
          for(i=0;i<k;i++)   printf("%d",b[i]);
         }
    
    getchar();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值