任意进制加法计算

来源:互联网 发布:淘宝一千零一夜2 编辑:程序博客网 时间:2024/05/18 03:18

任意进制加法计算

目前是限制一百位以内的,如果要修改更长的话也很容易。测试了一下,还行,如果有什么错误希望大家指出来大笑 。后续再抽空把减法也写一下。

#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_Bvoid 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;           }          };  } 



0 0
原创粉丝点击