C语言练习:大整数加法-创新互联

创新互联是一家以网站设计建设,小程序开发、网站开发设计,网络软件产品开发,企业互联网推广服务为主的民营科技公司。主要业务涵盖:为客户提供网站策划、网站设计、网站开发、主机域名、网站优化排名、卖友情链接等服务领域。凭借建站老客户口碑做市场,建设网站时,根据市场搜索规律和搜索引擎的排名收录规律编程,全力为建站客户设计制作排名好的网站,深受老客户认可和赞誉。分析: 

这道题有点难,对小白极其不友好。

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 //在头文件中定义了两组字符串函数。第一组函数的名字以str开头;第二组函数的名字以mem开头
#include //bool函数
#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语言练习:大整数加法-创新互联
文章源于:http://azwzsj.com/article/dgpjog.html