码迷,mamicode.com
首页 > 其他好文 > 详细

strtol函数

时间:2016-08-02 15:06:56      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:

今天做啦一个进制转换的题,改来改去最终倒是过啦,本来挺开心的,然后去翻啦一下题解,瞬间就有小情绪啦,哎,人家的代码辣么辣么短,实在是不开心,不过谁让咱是小渣渣呢,在此总结一下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\n",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一般为空。

strtol函数

标签:

原文地址:http://www.cnblogs.com/shangjindexiaoqingnian/p/5729198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!