POJ1331 Multiply(strtol函数练习)

题目链接:http://poj.org/problem?id=1331

主要介绍strtol函数:

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

strtol函数会将参数nptr字符串根据参数base来转换成长整型数。

参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用16进制做转换、遇到’0’前置字符而不是’0x’的时候会使用8进制做转换。

一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(‘\0‘)结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若参数endptr为NULL,则会不返回非法字符串。

1.不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。

2.endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol("ABCabc", &pos, 10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。

3.如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE

  

#include<string>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int  main()
{
    int t;
    cin>>t;

    char a[100],b[100],c[100];
    while(t--){
            int base=0;
            scanf("%s%s%s",a,b,c);
    //cin>>b>>c;
    for(int i=2;i<=16;i++)
    { int ta,tb,tc;
    ta=strtol(a,NULL,i);
    if(!ta&&a!="0")continue;

    tb=strtol(b,NULL,i);
    if(!tb&&b!="0")continue;

    tc=strtol(c,NULL,i);
    if(!tc&&c!="0")continue;

    if(ta*tb==tc)
    {

        base =i;break;
    }

    }
    cout<<base<<endl;
    }

    return 0;
}

  

时间: 2024-11-01 00:32:59

POJ1331 Multiply(strtol函数练习)的相关文章

strtol函数讲解

头文件:#include <stdlib.h> strtol() 函数用来将字符串转换为长整型数(long),其原型为: long int strtol (const char* str, char** endptr, int base); [参数说明]str 为要转换的字符串,endstr 为第一个不能转换的字符的指针,base 为字符串 str 所采用的进制. [函数说明]strtol() 会将参数 str 字符串根据参数 base 来转换成长整型数(long).参数 base 范围从2

strtol函数

今天做啦一个进制转换的题,改来改去最终倒是过啦,本来挺开心的,然后去翻啦一下题解,瞬间就有小情绪啦,哎,人家的代码辣么辣么短,实在是不开心,不过谁让咱是小渣渣呢,在此总结一下strtol 函数. 先来看看把我整不开心的这道题 Hrbust1896 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1896 题目简单,只要足够细心就能AC的 看我自己的代码 1 #include<stdio.

strtol 函数用法

strtol是一个C语言函数,作用就是将一个字符串转换为长整型long,其函数原型为: long int strtol (const char* str, char** endptr, int base); 下面我们来看下每个参数的意义: str是要转换的字符 enptr是指向第一个不可转换的字符位置的指针 base的基数,表示转换成为几进制的数 两点注意: 当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 '0x' / '0X' 前置字符则会使用 16 进制转换,遇到 '0'

strtol()函数

#include <stdlib.h>#include <stdio.h> int main(){ char a[] = "100"; char b[] = "100"; char c[] = "0x11"; int x, y, z; x = strtol( a, NULL, 10 ); y = strtol( b, NULL, 2 ); z = strtol( c, NULL, 16 ); printf( "x

atol和strtol的区别

atol和strtol的区别 字符串中有两个重要的函数:atol和strtol,它们的功能都是字符数组,转数值.但是用法差异较大.我们下面来说一下这两个函数在具体使用的时候要注意哪些方面. 首先,说atol. 这个函数定义为: long atol(const char* s); 就是输入一个字符数组(注意,不是string类型的字符串)的头元素的地址,然后我们就可以转换成数值.举个例子: #include<iostream> #include<string> using names

总结 &lt;stdlib.h&gt;头文件 在算法中可能会用到的一些函数

头文件<stdlib.>具有一定的总结性. 它定义了类型.宏和各种函数,这些函数用于:内存管理.排序和查找.整形运算.字符串到数字的转换.伪随机数序列.与环境的接口.把多字节字符串和字符转换成宽字符表示或反之. 竞赛可能会用到的: 1.字符串转换函数: atof();  把字符串转换成浮点数 atoi(); 将字符串转换成整型数, atoi()会扫描参数字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回    转 换

string.h文件中函数用法

下面为string.h文件中函数的详细用法: strcpy函数名:strcpy功 能: 拷贝一个字符串到另一个用 法: char *strcpy(char *destin, char *source); strncpy函数名:strncpy原型:char *strncpy(char *dest, char *src,size_tn);功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针.

Numpy数据的操作 * dot() multiply() 的区别

使用numpy时,跟matlab不同: 1.* dot() multiply() 对于array来说,* 和 dot()运算不同 *是每个元素对应相乘 dot()是矩阵乘法 对于matrix来说,* 和 multiply() 运算不同 * 是矩阵乘法 multiply()  是每个元素对应相乘 A B为array   MA MB为matrix multiply(MA, MB)对应元素相乘 dot(MA, MB)矩阵乘法 注意:对应元素相乘时,矩阵大小必须相同:矩阵相乘时,矩阵大小要满足矩阵相乘要

CSAPP 3e: Bomb lab (secret_phase)

这是秘密关卡,需要通过主动调用secret_phase函数才能触发,可以通过call secret 或者jump *0x地址来调用. 贴出函数:(fun7函数部分没有注释,后边续上了手写的图来解析这个函数了) 0000000000401204 <fun7>: 401204: 48 83 ec 08 sub $0x8,%rsp 401208: 48 85 ff test %rdi,%rdi 40120b: 74 2b je 401238 <fun7+0x34>;如果%rdi==0,r