十六進制大整數加法(20分)
問題描述:撰寫程式,從鍵盤讀入形如X + Y=的運算式計算結果,其中X和Y都是合法且長度不超過64位的十六進制非負整數,結果中所有字符均大寫且無多余的零,
樣例1:輸入1234+1234輸出0X2468
樣例2:輸入0000+12A=輸出0X12A
樣例3:輸入12ff+1=輸出0X1300
時間限制: 500ms
記憶體限制: 32000kb
代碼如下:
#include<stdio.h>
#include<string.h>
#define N 100
int main(void) {
char a[N]= {},b[N]= {};
scanf("%[^+]",a);
getchar();
scanf("%[^=]",b);
getchar();
int a0[N]= {},b0[N]= {},c0[N]= {0},k,length;
for(int i=(int)strlen(a)-1,j=0; a[j]!='\0'; i--,j++) {
if(a[j]>='0'&&a[j]<='9') a0[i]=(int)(a[j]-48);
if(a[j]>='a'&&a[j]<='f') a0[i]=(int)(a[j]-87);
if(a[j]>='A'&&a[j]<='F') a0[i]=(int)(a[j]-55);
}
for(int i=(int)strlen(b)-1,j=0; b[j]!='\0'; i--,j++) {
if(b[j]>='0'&&b[j]<='9') b0[i]=(int)(b[j]-48);
if(b[j]>='a'&&b[j]<='f') b0[i]=(int)(b[j]-87);
if(b[j]>='A'&&b[j]<='F') b0[i]=(int)(b[j]-55);
}
for(k=0;k<N; k++){
if(a0[k]+b0[k]+c0[k]>15) c0[k+1]++;
c0[k]=(a0[k]+b0[k]+c0[k])%16;
}
printf("0X");
for(length=N-1;c0[length]==0;length--);
for(int i=length; i>=0; i--)
switch(c0[i]) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
printf("%d",c0[i]);
break;
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
default:
break;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/241882.html
標籤:其他
