A+B问题

两个加数的位数不超过100000位


#include <iostream> 
#include <stdio.h> 
#include <string.h> 
#define MAX 100009 

using namespace std; 

void Rever(int n,char str[]); 
int Add(int n,char str1[],char str2[]); 

int main(int argc, char *argv[]) 
{ 
    char Str1[MAX]; 
    char Str2[MAX]; 
    while(cin>>Str1>>Str2) 
    { 
    int M,N; 
    M=strlen(Str1); 
    N=strlen(Str2); 
    Rever(M,Str1); 
    Rever(N,Str2); 
    int i; 
    if(M>N) 
    { 
        for(i=N;i<M;i++) 
        { 
           Str2[i]='0'; 
        } 
        N=M; 
    } 
    else 
    { 
        for(i=M;i<N;i++) 
        { 
           Str1[i]='0'; 
        } 
    } 
    Add(N,Str1,Str2); 
    } 
    return 0; 
} 

void Rever(int n,char str[]) 
{ 
    int i; 
    char a; 
    for(i=0;i<(n/2);i++) 
    { 
        a=str[n-1-i]; 
        str[n-1-i]=str[i]; 
        str[i]=a; 
    } 
} 

int Add(int n,char str1[],char str2[]) 
{     
    int i,j; 
    int sum; 
    int cf=0; 
    char Sum[MAX]; 
    for(i=0;i<n;i++) 
    { 
        sum=str1[i]+str2[i]-96+cf; 
        cf=sum/10; 
        Sum[i]=(sum%10)+48; 
    } 
    if(cf>0) 
    { 
        Sum[n]=cf+48; 
        Rever(n+1,Sum); 
        for(j=0;j<n+1;j++) 
        { 
          printf("%c",Sum[j]); 
        } 
    } 
    else 
    { 
        Rever(n,Sum); 
        for(j=0;j<n;j++) 
        { 
          printf("%c",Sum[j]); 
        } 
    } 
    printf("\n"); 
    return 0; 
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值