大整数的计算可以通过模运算来进行简化,也可以将其作为字符串读入,然后分段运算之后再进行拼接。
附:
atoi和itoa的示范代码如下:
#include
<stdlibh>
#include
<stdioh>
void
main(
void
)
{
char
s;
int
ix;
char
buffer[20];
int
i
=
3445;
long
l
=
-344115L;
unsigned
long
ul
=
1234567890UL;
s
=
"
-9885
pigs";
/
Test
of
atoi
/
ix
=
atoi(
s
);
printf(
"atoi
test:
ASCII
string:
%s\t\tinteger:
%d\n",
s,
ix
);
_itoa(
i,
buffer,
10
);
printf(
"String
of
integer
%d
(radix
10):
%s\n",
i,
buffer
);
_itoa(
i,
buffer,
16
);
printf(
"String
of
integer
%d
(radix
16):
0x%s\n",
i,
buffer
);
_itoa(
i,
buffer,
2
);
printf(
"String
of
integer
%d
(radix
2):
%s\n",
i,
buffer
);
_ltoa(
l,
buffer,
16
);
printf(
"String
of
long
int
%ld
(radix
16):
0x%s\n",
l,
buffer
);
_ultoa(
ul,
buffer,
16
);
printf(
"String
of
unsigned
long
%lu
(radix
16):
0x%s\n",
ul,
buffer
);
}
输出结果:
atoi
test:
ASCII
string:
-9885
pigs
integer:
-9885
String
of
integer
3445
(radix
10):
3445
String
of
integer
3445
(radix
16):
0xd75
String
of
integer
3445
(radix
2):
110101110101
String
of
long
int
-344115
(radix
16):
0xfffabfcd
String
of
unsigned
long
1234567890
(radix
16):
0x499602d2
#include <stdlibh>
int atoi(const char nptr);
long atol(const char nptr);
long long atoll(const char nptr);
long long atoq(const char nptr);
linux下面没对应的好像,我man 没有查到
给你直接找到一个实现,你放到自己代码里面就可以了
void itoa ( unsigned long val, char buf, unsigned radix )
{
char p; / pointer to traverse string /
char firstdig; / pointer to first digit /
char temp; / temp char /
unsigned digval; / value of digit /
p = buf;
firstdig = p; / save pointer to first digit /
do {
digval = (unsigned) (val % radix);
val /= radix; / get next digit /
/ convert to ascii and store /
if (digval > 9)
p++ = (char ) (digval - 10 + 'a '); / a letter /
else
p++ = (char ) (digval + '0 '); / a digit /
} while (val > 0);
/ We now have the digit of the number in the buffer, but in reverse
order Thus we reverse them now /
p-- = '\0 '; / terminate string; p points to last digit /
do {
temp = p;
p = firstdig;
firstdig = temp; / swap p and firstdig /
--p;
++firstdig; / advance to next two digits /
} while (firstdig < p); / repeat until halfway /
}
因为字符型计算时以ASCII码来计算,0的ASCII码是48,把一个整数(0~9之间的整数)加上'0'(字符0,实际上就是ASCII码值),得到对应数字的ASCII码值,也就是转为字符型了。
供参考:
#include<stdioh>
//2 <= base <= 36
#define MAX_INTEGER_BIT 33
char itos_base(int n, int base)
{
static char res[MAX_INTEGER_BIT];
for (int i = 0; i < MAX_INTEGER_BIT; i++)
{
res[i] = 0;
}
int index = MAX_INTEGER_BIT - 2;
do
{
res[index--] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n % base];
n /= base;
} while (n > 0);
return res + index + 1;
}
char itos(int n)
{
return itos_base(n, 10);
}
int main()
{
printf("%s\n", itos(1234567));
printf("%s\n", itos(0));
printf("%s\n", itos(99));
return 0;
}
运行截图
你这程序有问题,是不是抄错了?
============================
#include<stdioh>
void itoa16(int a,char p[])
{ int i=0,j=0,k,r,t[10];
if(a<0) {p[j++]='-';a=-a;}
p[j++]='0';p[j++]='x';
while(a>0)
{ r=a%16;
if(r<10) t[i]=r+'0';
else t[i]=r-10+'A';
a=a/16;
i++;
}
for(k=i-1;k>=0;k--,j++) p[j]=t[k];
p[j]='0';
}
main()
{ char a=127,b[10]="";
itoa16(a,b);
puts(b);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)