进制数相加 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; }