原题链接

题目大意:大数,20进制的加法计算。

解法:convert函数把字符串转换成数组,add函数把两个大数相加。

 

参考代码:

#include<stdio.h>
#include<string.h>

char* Digit="0123456789abcdefghij";
void convert(char*,int*);
void add(int*,int*,int*);
void print(int*);
int main(){
	char str1[101],str2[101];
	while(scanf("%s",str1)!=EOF&&scanf("%s",str2)!=EOF){
		int num1[101]={0},num2[101]={0},num3[102]={0};
		convert(str1,num1);
		convert(str2,num2);
		add(num1,num2,num3);
		print(num3);
	}
		
	return 0;
}

void convert(char* str, int* num){
	int j,k;
	k=0;
	for(j=strlen(str)-1;j>=0;j--){
		if(str[j]<='9'&&str[j]>='0')
			num[k]=str[j]-'0';
		if(str[j]<='j'&&str[j]>='a')
			num[k]=str[j]-'W';
		k++;
	}
}
void add(int* num1, int* num2, int* num3){
	int i,j=101,add=0,c=0;
	for(i=0;i<101;i++){
		add=num1[i]+num2[i]+c;
		c=add/20;
		num3[j]=add%20;
		j--;
	}
	if(c==1)
		num3[j]=1;
}
void print(int* num){
	int i,j=0;
	while(num[j]==0)j++;
	if(j>101){
		printf("0\n");
	}
	else{
		for(;j<102;j++){
			printf("%c",Digit[num[j]]);
		}
		printf("\n");
	}
}