这道题有点难,对小白极其不友好。
1 .大整数在内存中是采用小端的存储方式,使用int数组存储大整数的每一位。
2.对于每一个大整数,需要一个长度位记录大整数的长度,以方便输入输出.
用到的函数:
memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。
memset函数在string.h中声明
如:void *memset(void *s, int c, unsigned long n);
上面函数的功能是:将指针变量s所指向的前n字节的内存单元用一个“整数”c替换,注意c是int型。
//memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。memset函数在string.h中声明
// 如:void *memset(void *s, int c, unsigned long n);
//上面函数的功能是:将指针变量s所指向的前n字节的内存单元用一个“整数”c替换,注意c是int型。
#include
#include
#include
#define max_len 200
int an1[max_len + 10];
int an2[max_len + 10];
char num1[max_len + 10];
char num2[max_len + 10];
int main()
{
scanf("%s", num1); 输入需要相加的数字
scanf("%s", num2);
int i, j;
//memset函数在string.h中声明,是初始化内存的万能函数
memset(an1, 0, sizeof(an1)); //sizeof(an1)即an1的长度,意为将数组anl的前sizeof(an1)个字节内容置成0
memset(an2, 0, sizeof(an2));
//下面将num1中逆序存储的字符串形式的整数转换到an1中去,an1[0]对应于个位
j = 0 ;
int len1 = strlen(num1); //num1的字符长度
for (i = len1 - 1; i >= 0; i--) //原先数组num1是小端方式存储, 转换到an1中时需先变为正常的大端形式
an1[j++] = num1[i] - '0';
//将num2中逆序存储的字符串形式的整数转换到an2中去,an2[0]对应于个位
j = 0;
int len2 = strlen(num2); //num2的字符长度
for (i = len2 - 1; i >= 0; i--)
an2[j++] = num2[i] - '0';
for (i = 0; i< max_len; i++) { //两数组的每一位相加
an1[i] += an2[i];
if (an1[i] >= 10) { //若产生了进位
an1[i] -= 10;
an1[i+1] += 1; //高一位进位
}
}
//首先消除多余的0
for (i = max_len; i >= 0; i--) {
if (an1[i]) { //如果an1[i]不为0
break;
}
}
if (i == -1) { //i=-1;说明全为0
printf("0");
}
else {
for (j = i; j >= 0; j--) { //以小端方式输入内存,然后输出
printf("%d", an1[j]);
}
}
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文名称:C语言练习:大整数加法-创新互联
URL标题:http://lswzjz.com/article/dgpjog.html