头文件<cstdlib>提供了将整数转化为2-36进制表示的字符串string,由此可按照2-36各进制,根据实际需要,提取整数的每一位。
函数原型:char * itoa(int value, char * string, int radix);
功能:将整数value转化成用radix进制表示的字符串string,进制radix必须在2-36位之间
返回值: 指向string的指针。
示例: char strDest[20];
cout << itoa(3445, strDest, 10) << endl;
输出: 3445
功能:将整数value转化成用radix进制表示的字符串string,进制radix必须在2-36位之间
返回值: 指向string的指针。
示例: char strDest[20];
cout << itoa(3445, strDest, 10) << endl;
输出: 3445
若想使用此函数提取每一位,代码如下(若想将ASCII码值转化为数值,可以将其减'0'——str[i] - '0' 即为字符i的数值):
#include <iostream>
#include <cstdlib>
using namespace std;
char s[15];
int main()
{
int n, k;
while (cin >> n >> k) // n为数字,k为进制(2-36)
{
itoa(n, s, k); // 按进制将n转化为数字字符串
for (int i = 0; s[i] != '\0'; i++)
{
cout << s[i] - '0'; // s[i]为ASCII码值,s[i] - '0' 为该字符i对应的数值
}
cout << endl;
}
return 0;
}
使用示例:实例:寻找肇事者
题目如下:一辆肇事汽车的号码是4位十进制数。目击者向交警描述这个车号:这是一个完全平方数;且此完全平方数的各位数字从左至右一个比一个大。请帮助交警寻找肇事者:你能帮助交警算出车号吗?
分析:先枚举1000-9999之间所有的完全平方数,事先定义一个字符数组str,再使用
itoa函数,按十进制将完全平方数n转换成字符串,并存放入在字符数组str中,进而判断n各位数字的大小关系(分别比较它们的ASCII码值即可),从而判断n是否符合题意。
代码如下:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int n, i, flag;
char str[5];
for (i = 32; i < 100; i++)
{
flag = 0;
n = i * i;
itoa(n, str, 10);
for (int j = 0; j < 3; j++)
{
if (str[j] >= str[j + 1])
{
flag = 1;
}
}
if (flag == 0)
cout << n << endl;
}
cout << endl;
return 0;
}