写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
该方法的作用是将 String 解码为 Integer。接受十进制、十六进制和八进制数字。
根据要解码的 String(mn)的形式转成不同进制的数字。 mn由三部分组成:符号、基数说明符和字符序列。 -0X123中-是符号位,0X是基数说明符(0表示八进制,0x,0X,#表示十六进制,什么都不写则表示十进制),123是数字字符序列。
import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception{ Scanner sc=new Scanner(System.in); while (sc.hasNext()){ String str=sc.next(); System.out.println(Integer.decode(str)); } } }
只是将字符串转换成十进制的数,程序就能通过,看来题目的目的只是将十六进制转换成十进制 #include<stdio.h> #include<string.h> #include<math.h> int main() { char str[100]; int i=0,count,sum; while(gets(str))//用于多次输入 { count=strlen(str);//计算字符串的长度 sum=0; for(i=count-1;i>=0;i--)//从十六进制个位开始,每位都转换成十进制 { if(str[i]>='0'&&str[i]<='9')//数字字符的转换 { sum+=(str[i]-48)*pow(16,count-i-1); } else if(str[i]>='A'&&str[i]<='F')//字母字符的转换 { sum+=(str[i]-55)*pow(16,count-i-1); } } printf("%d\n",sum); } return 0; }
/*方法一:作为字符串一个字符一个字符的读*/ #include<isotream> #include <string.h> using namespace std; int main() { char *sp=new char[10]; while(cin>>sp) { int n; int num;int result=0; n=strlen(sp); for(int i=2;i<n;i++) { switch (sp[i]) { case 'A': num=10;break; case 'B': num=11;break; case 'C': num=12;break; case 'D': num=13;break; case 'E': num=14;break; case 'F': num=15;break; default: if(sp[i]>='0'&&sp[i]<='9') num=sp[i]-'0'; else return 0; } result=result*16+num; } cout<<result<<endl; memset(sp,0,sizeof(sp)); result=0; } return 0; } /*方法二:流类格式化输入输出*/ #include<isotream> #include <iomanip> using namespace std; int main() { int a; while(cin>>hex>>a) cout<<dec<<a<<endl; return 0; }
#include<iostream> #include<string> using namespace std; int main(){ string s; while(cin>>s){ int length = s.size(); if(length <= 2) continue; if(s[0]!='0' || s[1]!='x') continue; int res =0; int flag =1; for(int i=length-1;i>1;--i){ char cur = s[i]; if(cur>='A'&&cur<='F'){ res+=(cur-'A'+10)*flag; } else if(cur>='0' && cur<='9'){ res+=(cur-'0')*flag; } else continue; flag*=16; } cout<<res<<endl; } return 0; }
import java.math.BigDecimal; import java.util.ArrayList; import java.util.Comparator; import java.util.Scanner;
//用string做存储 进行大数加和乘法,不会int溢出 输入任意长度16进制字符均可以#include<iostream> #include <string> #include <algorithm> using namespace std; void addI(string& str, int a){ if (str.length() == 0) { while (a > 0){ str += '0' + a % 10; a /= 10; } reverse(str.begin(), str.end()); return ; } reverse(str.begin(), str.end()); int sum = str[0] - '0' + a; str[0] = '0' + sum % 10; int carry = sum / 10; for (int i = 1; i<str.length(); i++){ sum = str[i]-'0' + carry; str[i] = sum % 10 + '0'; carry = sum / 10; } if (carry>0) str += (char)(carry + '0'); reverse(str.begin(), str.end()); } void multi16(string& str){ if (str.length() == 0)return; reverse(str.begin(), str.end()); int carry = 0; int mul = 0; for (int i = 0; i<str.length(); i++){ mul = 16*(str[i] - '0') + carry; str[i] = mul % 10 + '0'; carry = mul / 10; } if (carry>0){ while (carry > 0){ str += carry % 10 + '0'; carry /= 10; } } reverse(str.begin(), str.end()); } int main(){ string str; string res; int tmp; while (cin >> str){ res.clear(); for (int i = 2; i < str.length(); i++){ multi16(res); if (isupper(str[i]))tmp = 10 + str[i] - 'A'; else if (islower(str[i])) tmp = 10 + str[i] - 'a'; else tmp = str[i] - '0'; addI(res, tmp); } cout << res << endl; } return 0; }
s=input() dic_map={'A':10,'B':11,'C':12,'D':13,'E':14,'F':15} count=0 k=0 for i in s[:1:-1]: if i.isdigit()==True: count+=int(i)*(16**k) k+=1 else: count+=dic_map[i]*(16**k) k+=1 print(count)
/*不太明白这道题想考什么?只是16进制转换而已。要求输出十进制字符串,但以int形式输出也通过了。*/#include <iostream>#include <cstring>#include <cmath>using namespace std;intf(charc,inti){intn;switch(c){case'F': n=15; break;case'E': n=14; break;case'D': n=13; break;case'C': n=12; break;case'B': n=11; break;case'A': n=10; break;default: n=c-'0';}returnn*pow(16,i);}intmain(){chars[10];while(cin>>s){intnumber = 0;for(inti=2;i<strlen(s);++i){number += f(s[i],strlen(s)-i-1);}cout << number << endl;}return0;}