strtol函数

今天做啦一个进制转换的题,改来改去最终倒是过啦,本来挺开心的,然后去翻啦一下题解,瞬间就有小情绪啦,哎,人家的代码辣么辣么短,实在是不开心,不过谁让咱是小渣渣呢,在此总结一下strtol 函数。

先来看看把我整不开心的这道题

Hrbust1896 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1896

 题目简单,只要足够细心就能AC的

看我自己的代码

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<string.h>
 5 #include<stack>
 6 #include<math.h>
 7 using namespace std;
 8 int main()
 9 {
10 
11 
12     int n,m;
13     char s[20];
14     while(~scanf("%d%s",&n,&s)){
15             int t=0;int ss[50];
16         int len=strlen(s);
17         for(int i=0;i<len;i++){
18              if(s[i]=='a'||s[i]=='A')ss[t++]=10;
19             else if(s[i]=='b'||s[i]=='B')ss[t++]=11;
20             else if(s[i]=='c'||s[i]=='C')ss[t++]=12;
21             else if(s[i]=='d'||s[i]=='D')ss[t++]=13;
22             else if(s[i]=='e'||s[i]=='E')ss[t++]=14;
23             else if(s[i]=='f'||s[i]=='F')ss[t++]=15;
24             else {ss[t++]=s[i]-'0';
25 
26             }
27 
28         }
29 
30         int sum=0;int j=0;
31         for(int i=t-1;i>=0;i--){
32           sum+=ss[i]*pow(n,j++);
33         }
34 
35         cout<<sum<<endl;
36 
37 
38     }
39 }
View Code

至于我发现的很牛很短的代码是这个样子的

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <string.h>
 4 #include <math.h>
 5 #include <stdlib.h>
 6 using namespace std;
 7 int main()
 8 {
 9     int m;//base(代表进制)
10     char n[100];//char*nptr
11     while(~scanf("%d %s",&m,&n))
12     {
13         printf("%d
",strtol(n,NULL,m));
14         //必须设定endptr为NULL 否则返回非法字符串
15     }
16 }
View Code

里面的注释是大神打上去的。。。

嘎嘎嘎,罪魁祸首就是strtol这个函数,不过他真的太方便啦嘿嘿

long int strtol(const char *nptr, char **endptr, int base)

*nptr指向的是在不同的进制下数的表示的字符串,base则为进制,char **endptr一般为空。

你若盛开,清风自来...
原文地址:https://www.cnblogs.com/shangjindexiaoqingnian/p/5729198.html