zoj1205Martian Addition

来源:互联网 发布:ubuntu调整时区 编辑:程序博客网 时间:2024/06/05 16:34

以20进制相加

注意两个操作数长度不一定相同

#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){int op1[100];int op2[100];char result[102];char str[101];int carriage;int i,len1,len2,a,b,sum,j,k;    while(scanf("%s",str)!=EOF){   len1 = strlen(str);for(i = 0;i<len1;i++)if(str[i]>='a'&&str[i]<='j') op1[i] = str[i] -'a' + 10;else op1[i] = str[i] - '0';scanf("%s",str);len2 = strlen(str);for(i = 0;i<len2;i++)if(str[i]>='a'&&str[i]<='j') op2[i] = str[i] -'a' + 10;else op2[i] = str[i] - '0';for(i = len1 - 1,j = len2 -1,carriage = 0,k = 0; i>=0||j>=0;i--,j--,k++){if(i < 0 ) sum = op2[j] + carriage;else if(j<0) sum = op1[i]+ carriage;else  sum = op1[i] + op2[j] + carriage;carriage = sum / 20;sum = sum % 20;if(sum >= 10) result[k] = sum -10 + 'a';else result[k] = sum + '0';}          if(carriage) {          if(carriage >= 10) result[k++] = carriage - 10 +'a';          else if(carriage) result[k++] = carriage +'0';           }          for(i = k-1;i>=0;i--)          putchar(result[i]);          printf("\n");}return 0;}

0 0