1411: 喜闻乐见的a+b(20进制)

分析:

        本题要求进行100位以内的二十进制数字相加运算。加数和被加数的长度不一定相等。超长数字的相加,我们用字符串来处理。
  先将两个字符串反转,再从第0位开始到末尾,两位依次相加,如果两位相加的结果超过19,那么需要向下一位产生进位。

       最后将结果数组反转输出即可。注意字符转为数字的做法,如果字符本身是数字,减‘0’即可,如果是字母,减‘a’ + 10。

代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char a[1000],b[1000]; //大数用字符串存起来
	int c[1000]; 
	int n1,n2,i,j,max,sum,min;
	while(scanf("%s%s",a,b)!=EOF)
	{
		memset(c,0,sizeof(c));
	  n1=strlen(a);n2=strlen(b);
	  if(n1>n2) {max=n1;min=n2;}
	  else {max=n2;min=n1;}
	  for(i=0;i<n1;i++)             //将字符转换成数字     a数组      
	  {
	  	if(a[i] >='a'&&a[i]<='j') //如果是字符 
	    a[i]=a[i]-'a'+10;              
	    if(a[i]>='0'&&a[i]<='9')    //如果是数字 
	    a[i]=a[i]-48;
	  }
	  for(i=0;i<n2;i++)               //处理b数组 转换成数字 
	  {
	  	if(b[i] >='a'&&b[i]<='j')
	    b[i]=b[i]-'a'+10;
	    if(b[i]>='0'&&b[i]<='9')
	    b[i]=b[i]-48;
	  }
     int a1[1000],b1[1000];
      memset(a1, 0, sizeof(a1));
        memset(b1, 0, sizeof(b1));
     for(i=n1-1,j=0;i>=0;i--,j++)       //反转数组a 
      a1[j]=a[i];
    for(i=n2-1,j=0;i>=0;i--,j++)      //反转b 
      b1[j]=b[i];
     for (i=0;i<max;i++)                    //模拟进位,倒序相加 
        {
            c[i]+=a1[i]+b1[i];
            if(c[i]>19)
            {
                c[i+1]++;
                c[i]-=20;
            }
        }
        for (i=999; i>=0 ; i--)
        {
            if (c[i])          //倒序找到 非零位置 
            {
                max=i;
                break;
            }
            if (i==0)
                max=0;
        }
  	  for(i=max;i>=0;i--)
	  {
	  	if(c[i]<10) printf("%d",c[i]);                // 倒序输出 
	  	else if(c[i]==10) printf("a");
            else if(c[i]==11) printf("b");
            else if(c[i]==12) printf("c");
            else if(c[i]==13) printf("d");
            else if(c[i]==14) printf("e");
            else if(c[i]==15) printf("f");
            else if(c[i]==16) printf("g");
            else if(c[i]==17) printf("h");
            else if(c[i]==18) printf("i");
            else if(c[i]==19) printf("j");
	  }
	  printf("\n");
	}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42079027/article/details/81161542