C语言高精度算法中最简单的问题
来源:百度知道 编辑:UC知道 时间:2024/06/15 02:57:53
下面那个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] =