#include <stdio.h> // 0x2A = 2* 16^1 + 10 * 16^0 = 32+10 = 42 int power(int n,int k) // n^k { int i; int val=n; if(k==0){ return 1; } if(k==1){ return n; } for(i=2;i<=k;i++){ // i=2;n*n;i=3,n*n*n,i=4,n*n*n*n val = n * val; } return val; } int main() { char s[1000]=""; // printf("%d\n",0x2A); // 42 while(scanf("%s",s)!=EOF){ int i,start,end,k,j; int d=0; for(i=0; s[i]!='\0'; i++){ if(s[i]=='0' && (s[i+1]=='x' || s[i+1]=='X')){ start=i+2; for(i=i+2; s[i]!='\0' && !(s[i]=='0' && (s[i+1]=='x' || s[i+1]=='X')); i++){ // 注意条件,\0判断和非操作(因为i变化了,并且使用s[i]值进行判断) } end=i-1; for(k=end,j=0;k>=start;k--,j++){ // 低位开始 if((s[k]>='A' || s[k]>='a') && (s[k]>='F' || s[k]<='f')){ d = d + (s[k]-'A'+10)*power(16,j); }else{ d = d + (s[k]-'0')*power(16,j); // 注意输入的是字符串,这里也要处理 } // printf("power(16,j)=%d; d=%d\n",power(16,j),d); } printf("%d\n",d); // 接下来从上个数结束的地方继续遍历 } } } return 0; }