• 一个运用c语言写的大数相加程序，可以实现大数的四则运算，拥有详尽的代码注释，相信可以帮助很多同学。
• //倒序相加 for ( int i = nMaxlen - 1 ; i >= 0 ; i -- ) { nFinalArry [ i ] + = ( nArry [ i ] + nArry2 [ i ] ) ; //这里考虑了进位加入 if ( nFinalArry [ i ] > 10 ) { ...
#include "stdafx.h"
#include<string.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
char chArry[0x20] = {};
char chArry2[0x20] = {};
int nArry[0x20] = {};//数字数组
int nArry2[0x20] = {};
printf("输入第一个数字：");
scanf("%s", &chArry);
printf("输入第二个数字:");
scanf("%s", &chArry2);
int nFinalArry[0x20] = {};
int nLen1 = strlen(chArry);
int nLen2 = strlen(chArry2);
int nMaxlen = nLen1 > nLen2 ? nLen1 : nLen2;
int nDiffer = abs(nLen1 - nLen2);
//补零 保证一样长度
if (nLen1 == nMaxlen&& nDiffer!= 0)//判断是否需要补
{
for (size_t i = nMaxlen-1; i >=nDiffer; i--)//nMaxlen-1：去掉\0；= nDiffer：考虑第0个复制；
{
memcpy(&chArry2[i], &chArry2[i - nDiffer], sizeof(chArry2[i]));//往后面移动
}
memset(chArry2, '0', nDiffer);//将前面的补为0
}
else if ((nLen2 == nMaxlen&& nDiffer != 0))
{
for (size_t i = nMaxlen - 1; i >= nDiffer; i--)
{
memcpy(&chArry[i], &chArry[i - nDiffer], sizeof(chArry[i]));
}
memset(chArry, '0', nDiffer);
}
//转化为数字字符
for (size_t i = 0; i < nMaxlen; i++)
{
nArry[i] = chArry[i] - '0';
nArry2[i] = chArry2[i] - '0';
}
//倒序相加
for (int i = nMaxlen-1; i >=0; i--)
{
nFinalArry[i] += (nArry[i] + nArry2[i]);//这里考虑了进位加入
if (nFinalArry[i]>10)
{
nFinalArry[i] = nFinalArry[i] - 10;
nFinalArry[i-1]++;
}
}
printf("结果为:");
for (int i = 0; i < nMaxlen; i++)
{
printf("%d", nFinalArry[i]);
}
printf("\n");
return 0;
}




展开全文
• ## C语言大数相加

千次阅读 2018-04-06 16:39:17
printf("请分别输入要相加的两个数：\n"); scanf("%s",&a); scanf("%s",&b); a1=strlen(a); b1=strlen(b); M=max(a1,b1); m=min(a1,b1); for(i=M-1;i>M-m-1;i--){ if(b[i]+a[i-M+m]-96>=10){ ...
#include<stdio.h>
#include<string.h>
max(int m,int n){
if(m<n) return n;
return m;
}
min(int m,int n){
if(m>n) return n;
return m;
}
int main(){
char a[1001],b[1001],a1,b1,i,M,m;
for(;;){
printf("请分别输入要相加的两个数：\n");
scanf("%s",&a);
scanf("%s",&b);
a1=strlen(a);
b1=strlen(b);
M=max(a1,b1);
m=min(a1,b1);
for(i=M-1;i>M-m-1;i--){
if(b[i]+a[i-M+m]-96>=10){
b[i]=b[i]+a[i-M+m]-10-48;
if(i!=0) b[i-1]++;
else printf("1");
}
else{
b[i]=b[i]+a[i-M+m]-48;
}
}
printf("%s\n",b);
}
}

（注意，程序只能计算两个非负数的和）
展开全文
• #include"stdio.h" #include"string.h" int maxlen; int an1[100]; int an2[100]; char sz1[100]; char sz2[100]; int Addition( int Maxlen , int an1[] , int an2[] ); int mai
#include"stdio.h"
#include"string.h"
int maxlen;
int an1[100];
int an2[100];
char sz1[100];
char sz2[100];
int Addition( int Maxlen , int  an1[] , int  an2[] );
int main()
{
int i,j;
scanf("%s",sz1);
scanf("%s",sz2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
int len1=strlen(sz1);
int len2=strlen(sz2);
if(len1>len2) maxlen=len1;maxlen=len2;
for(j=0,i=strlen(sz2)-1;i>=0;i--)
an2[j++]=sz2[i]-'0';
for(j=0,i=strlen(sz1)-1;i>=0;i--)
an1[j++]=sz1[i]-'0';
Addition ( maxlen , an1 , an2 ) ;

for( i = 100 ; i >= 0; i -- )
{
if( an1[i] != 0 )break;
}
for(;i>=0;i--)
printf("%d" ,an1[i]) ;
printf("\n") ;
return 0;
}
int Addition( int Maxlen,int an1[] , int an2[] )
{
for(inti= 0;i<Maxlen;i++ )
{
an1[i]+=an2[i] ;

if(an1[i]>=10 )
{
an1[i]-= 10 ;
an1[i+1]++ ;
}
}
return 0;
}


展开全文
• 由于大数不可存入int数组中，所以将数字转为字符输入char数组中，将两个数组数字从个位开始，模拟正常数字加法，需要进位1时设置进位标志，两数相加大于10时进位，见具体代码。 #include <string.h> #include ...
主要思路：
由于大数不可存入int数组中，所以将数字转为字符输入char数组中，将两个数组数字从个位开始，模拟正常数字加法，需要进位1时设置进位标志，两数相加大于10时进位，见具体代码。
#include <string.h>
#include <stdio.h>

int main ()
{
char a[100], b[100], c[101];   //创建用于接收两个大数的字符数组以及接收相加后结果的数组，两个100位的大数相加，最多101位
int i, j, count = 0, alen, blen, carry = 0, temp;
//i,j为循环标志， count为接收结果的数组的长度， temp为数字每一位相加之后的结果， carry为进位标志，若为进位即为1否则为0
gets(a);
gets(b);

alen = strlen(a);
blen = strlen(b);

for (i = alen-1, j = blen-1; i>=0 && j>=0; i--,j--)  //将两个数字从个位逐加，即从数组的最高位加起
{
temp = a[i] - '0' + b[j] - '0' + carry;  //模拟每一位相加的过程，将字符转换为数字字符，carry为进位标志
if (temp >= 10){
temp = temp - 10;
carry = 1;	//每一位相加后大于10即表示有进位
}else{
carry = 0;
}

c[count++] = temp + '0';	//相加后的结果暂时转为字符进行处理
}

//当逐位相加，某个数组有剩余时
while (i >= 0){
temp  = a[i] - '0' + carry;		//此时仍需要加carry的原因是有可能在最后一位相加后需要进位
if (temp >= 10){
temp = temp - 10;
carry = 1;
}else {
carry = 0;
}

c[count++] = temp + '0';
i--;
}

while (j >= 0){
temp = b[j] - '0' + carry;
if (temp >= 10){
temp = temp - 10;
carry = 1;
}else {
carry = 0;
}

c[count++] = temp + '0';
j--;
}

if (carry){	//若最后还有进位，则使最高位为1
c[count] = 1 + '0';
}else {
count--;	//由于前一步是count++，count已经自加，由于没有进位，则使count--
}

while (count >= 0){
printf ("%c",c[count--]);
}

return 0;
}



展开全文
• 大数相加 大数相减
• ## C语言大数相加实现方法分析

万次阅读 多人点赞 2018-04-16 16:01:36
• /*------end---------*/ } struct node *addNumber(struct node *A, struct node *B) { //此处实现函数求两数相加，并返回和值链表的表头； /*------begin---------*/ //遍历A与B表 struct node *temp_A = NULL; ...
• C语言 大数相加 大数相减 大数相乘
• 最近的文章已经学习了许多C语言的...和我前一篇文章有点相关，前一篇是大数相加，这次请大家思考这个算法的实现：代码附上(思考动手后再看)：#include#includeusing namespace std;int main(){string s1,s2;int ji...
• C语言实现大数相加 //利用栈来实现大数相加 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char s1[100]; char s2[100]; printf("请分别输入你的s1,s2\n"); gets(s1...
• C语言处理大数相加C语言中，当两个数超过长整形即long int的数据上限时，要完成求和，就无法用简单的运算符进行计算，此时要将其用字符串处理。代码如下： #include<stdio.h> #include<string.h>...
• C语言中的大数相加问题一.为什么会出现大数相加的问题二.大数相加所要掌握的知识三.大数相加的思路四.整理代码五.运行实例 一.为什么会出现大数相加的问题 **C语言是面向过程的一门语言，它并不像java一般拥有众多...
• 两个大数我们可以用数组来保存，然后在数组中逐位进行相加，再判断该位相加后是否需要进位，为了方便计算，我们将数字的低位放在数组的前面，高位放在后面。 捕获.JPG #include<stdio.h> #include<...
• ## C语言 ☞ 大数相加

千次阅读 2016-04-23 13:46:23
算法思想：大数使用字符串存储，每一个单元存储操作数的每一位，之后执行位相加。基本思路：字符串反转、字符变数字、位运算、反序输出C语言代码：#include<stdio.h> #include<string.h> #define Max 101 void ...
• #include #include void reverse( char *s ); void AddBigNum( char* s1, char* s2, char* result ); int main() {  char s1[1000];  char s2[1000];  gets(s1);  gets(s2);  char res

...

c语言 订阅