十六进制转换十进制

| November 6, 2007 14:31 | timmy | Via Original
连续输入一批以 # 结束的字符串(字符串的长度不超过80),遇 ## 则全部输入结束。
对每个字符串做如下处理:滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
例:括号内是说明
输入:
10#Pf4+1#-+A##  (连续输入3个字符串)
输出:
16
3905
10


#include "stdio.h"
#include "math.h"
#define MAXLEN 80
int main( )
{  int i,k,j;
  long number;
  char ch,oldch,str[MAXLEN], num[MAXLEN];

  oldch=' ';
  while((ch=getchar())!='#'||oldch!='#'){
     k=0;
     while(ch!='#'&& k< MAXLEN-1){
       str[k++]=ch;
       ch=getchar();
     }
     oldch='#';
     str[k]='\0';
    j=0;
    for(i=0;i<k;i++)
      if(str[i]>='0'&&str[i]<='9'||str[i]>='A'&&str[i]<='G'||str[i]>='a'&&str[i]<='g'){
        num[j]=str[i];
        j++;
      }
    num[j]='\0';
    j--;
    number=0;
    for(i=0;j>=0;i++){
      if(num[i]>='0'&&num[i]<='9')
        number=number+(num[i]-'0')*pow(16,j);
      if(num[i]>='A'&&num[i]<='G')
        number=number+(num[i]-'A'+10)*pow(16,j);
      if(num[i]>='a'&&str[i]<='g')
        number=number+(num[i]-'a'+10)*pow(16,j);
      j--;
    }
     printf("%ld\n",number);
   }
}
Tags:
Program/Code » C/C++ | Comments(1) | Trackbacks(0) | Reads(544)
周末又要考试了……
心情糟糕……
期中之后……
改变……
木婴
November 7, 2007 00:59
Pages: 1/1 First page 1 Final page
Add a comment
 Site URI
 Email
  Password Optional
 Nickname  *  [Register]
               

 
Emots
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
Enable HTML
Enable UBB
Enable Emots
Hidden
Remember