C语言高精度算法中最简单的问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:57:53
我想用一下这种方法编写高精度算法,但是遇到一个问题,下面是我编写的一小部分,作用是把传进去的长整型的数转化存进一个buffer 这个数组中,接着就是我要提问的关键,也就是需要大家帮我解答的地方
下面那个for 循环的作用,麻烦大家尽可能地详细地解答吧,我老师给我的注释如下,但是我看不懂,麻烦大家啦!~~

如果回答的好我再加分啊!~~
make_number(long n)
{
char buffer[16]; /* assume long has 16 digits*/
int len, i;
NUMBER *u;

len = sprintf(buffer, "%d", (n >= 0) ? n : -n);
for (i = 0; buffer[i] != '\0'; i++) /* convert to bin*/
buffer[i] = buffer[i] - '0';
我意思是
buffer[i] = buffer[i] - '0'; 这句话中减去的‘0’,那存入字符数组的东西是二进制的东西还是ACSII码呢,我老师说使用了二进制,到底是怎么一回事,麻烦解释一下啦 (我就是想把这个语句中的内部转换与运算弄清楚而已)

make_number(long n)
{
char buffer[16]; /* 长整型数追多有16为,所以设一个16位的char数组*/

int len, i;
NUMBER *u;

len = sprintf(buffer, "%d", (n >= 0) ? n : -n);//把n用sprintf打印到buffer中

for (i = 0; buffer[i] != '\0'; i++) // buffer[i] != '\0'意思是到字符串末尾

buffer[i] = buffer[i] - '0'; /*把buffer[i]中的内容由字符转换为数字(因为sprintf自动将其转换成了字符)。

/*比如n=10时,buffer[0]='1'(ASCII码49),buffer[1]='0'(ASCII码48)。
我们想要的是buffer[0]=1,buffer[1]=0。所以要buffer[i]=buffer[i]-'0'*/

给你试试这个就明白了:
#include<stdio.h>
void make_number(long n)
{
char buffer[16]; /* assume long has 16 digits*/
int len, i;
//NUMBER *u;

len = sprintf(buffer, "%d", (n >= 0) ? n : -n);
for (i = 0; buffer[i] != '\0'; i++) /* convert to bin*/
{
buffer[i] =