进制数相加 char* sum(int n,char* num1,char* num2)

进制数相加 char* sum(int n,char* num1,char* num2)

功能:

第一个参数n 代表多少进制,最大就是36进制,从0到9,然后a到z代表10到35.

char* num1 和char* num2 分别接受两个数字字符串,然后相加得到的结果返回

#include<iostream>
using namespace std;
//n 表示进制数
//a 表示操作数1
//b 表示操作数2
//jy 表示进位数
//jy1 是否进位 
char sum1(int n,char a,char b,int jy,int* jy1)
{
    int num1=0;
    int num2=0;
    if(isdigit(a)) num1=a-'0';
    else num1=a-'a'+10;
    if(isdigit(b)) num2=b-'0';
    else num2=b-'a'+10;
    if(num1+num2+jy>n)
    {
    
        int temp=num1+num2+jy-n;
        *jy1=1;
        if(temp<10)
        {
            return '0'+temp;
          
        }
        else
        {
            
            return 'a'+temp-10;
            
        }
    }
    else
    {
       
        int temp=num1+num2+jy;
        *jy1=0;
        if(temp<10)
        {
            return '0'+temp;
          
        }
        else
        {
            
            return 'a'+temp-10;
            
        }    
    }
}
char* sum(int n,char* num1,char* num2)
{
    int num1_len= strlen(num1);
    int num2_len=strlen(num2);
    int max=num1_len>num2_len?num1_len:num2_len;
    int jy=0;
    char *he=new char[max+2];
    memset(he,0,max+2);
    for(int i=0;i<max+1;i++)
    {
        char a;
        char b;
        if(num1_len-1-i>=0)
        {
             a=num1[num1_len-1-i];
            
            
        }
        else{
            a='0';
        }
        if(num2_len-1-i>=0)
        {
           b=num2[num2_len-1-i]; 
        }
        else
        {
            b='0';
        }
        he[i]=sum1(n,a,b,jy,&jy);
        
    } 
    return he;
} 
int main()
{
    char* num1=new char[100];
    char* num2=new char[100];
    int n;
    while(cin>>num1>>num2>>n)
    {
        char* p=sum(n,num1,num2);
        for(int i=0;i<strlen(p);i++)
         {
           if(p[strlen(p)-1-i]=='0')continue;
             cout<<p[strlen(p)-1-i];
        }
    }

    

    getwchar();
    return 0;
}
原文地址:https://www.cnblogs.com/Small-Life/p/4009327.html