任意进制加法计算
目前是限制一百位以内的,如果要修改更长的话也很容易。测试了一下,还行,如果有什么错误希望大家指出来
。后续再抽空把减法也写一下。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ARY 30 //定义进制(30进制) char px[]={ '0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t', 'u','v','w','x','y','z' }; unsigned char c_chang(char c) { if((c>='0')&&(c<='9')) { return c-'0'; } else if((c>='a')&&(c<='j')) { return c-'a'+10; } else if((c>='A')&&(c<='J')) { return c-'A'+10; } return 0xff; } //data_Sum=data_A+data_B void test(char *data_A,char *data_B,char *data_Sum) {
char buf_a[102];char buf_b[102];char buf_s[102];char str_s[102];unsigned char carry_flag=0;unsigned char len_a=strlen(data_A);unsigned char len_b=strlen(data_B);memset(buf_a,0,sizeof(buf_a));memset(buf_b,0,sizeof(buf_b));memset(buf_s,0,sizeof(buf_s));memset(str_s,0,sizeof(str_s));for(char i=0;i<len_a;i++){
buf_a[102-i-1]=c_chang(data_A[len_a-i-1]);
}for(char i=0;i<len_b;i++){
buf_b[102-i-1]=c_chang(data_B[len_b-i-1]);
}for(char i=0;i<102;i++){
char sum=buf_a[102-i-1]+buf_b[102-i-1]+carry_flag;if(sum>=ARY){
buf_s[102-i-1]=sum-ARY;carry_flag=1;
}else{
buf_s[102-i-1]=sum;carry_flag=0;
}}for(char i=0;i<102;i++){
str_s[i]= px[buf_s[i]];
}for(char i=0;i<102;i++){
if(str_s[i]!='0'){
for(char j=i;j<102;j++)
{data_Sum[j-i]= str_s[j];}break;
}
}
} main() { char *aa="adeghjcd7k"; char *bb="22d5f1h2ic"; char sum[102]; memset(sum,0,sizeof(sum)); test(aa,bb,sum); printf("sum=%s\r\n",sum); while(1) { char end_buf[512]; gets(end_buf); if(strstr(end_buf,"end")||(strstr(end_buf,"END"))) { break; } }; }