大数加法(100位数)

注意:

这只是100位数(十进制)以内的正整数的加法

目录

法一

法二

一、为什么不能简单的A+B 

二、大数加法的原理

篇尾


我终于在今天写出来了o(*≧▽≦)ツ┏━━┓

法一

#include 
#include
int main(){
//定义变量、初始化 
	char a[101],b[101];
	int c[101]={0};
	for(int i=0;i<101;i++){a[i]='0';b[i]='0';}
//输入大数、判断长度  
	scanf("%s %s",a,b);
	int long_a=strlen(a);
	int long_b=strlen(b);
	int long_max=long_a>long_b?long_a:long_b;
	int long_min=long_a>long_b?long_b:long_a;
//倒过来 
	strrev(a);strrev(b);
	//printf("%s %s\n",a,b);
	for(int i=0;i0;i--){
   		if(output[i]>=10){
			output[i-1]+=1;
   			output[i]=output[i]%10;
        }
	}
	printf("\n");
	for(int i=0;i

写出来后发现

Σ(っ °Д °;)っ 

找了半天原因,发现是不能用 strrev( );

这个我也不太清楚,大概是我刷题的平台的 string.h 库里没有这个函数吧,

了解情况后,我决定通过循环实现 strrev() 函数的功能。

法二

#include 
#include
int main(){
//定义变量、初始化 
	char x[101],y[101],a[101],b[101];
	int c[101]={0};
	for(int i=0;i<101;i++){x[i]='0';y[i]='0';a[i]='0';b[i]='0';}
//输入大数、判断长度  
	scanf("%s %s",x,y);
	int long_a=strlen(x);
	int long_b=strlen(y);
	int long_max=long_a>long_b?long_a:long_b;
	int long_min=long_a>long_b?long_b:long_a;
//倒过来 
	for(int i=0;i<=long_a;i++){
		a[i]=x[long_a-i-1];
	}
	for(int i=0;i<=long_b;i++){
		b[i]=y[long_b-i-1];
	}
//字符变整型 
	for(int i=0;i0;i--){
   		if(output[i]>=10){
			output[i-1]+=1;
   			output[i]=output[i]%10;
        }
	}
//输出
	for(int i=0;i

这道题困惑了我好几天,ac时真的非常激动,以后掌握的牢了会来简化代码

感觉有点水,好了,正文开始

一、为什么不能简单的A+B 

在C语言中,每个数据类型都是有表示范围的,这个我以后会写一篇细讲

目前,表示正整数范围最大的数据类型是 unsigned long long (int),

表示范围是 0~4294967295 即 0~( -1),

也就是说只用基本数据类型,十位数的运算就是到极限了,

这时,想要进行大数运算,就要另寻他法了。 

二、大数加法的原理

其实,就是我们小学学的列式法,一位一位的加,大于十就进位。 

篇尾

我也是初学者,知识限制,代码比较笨,网上大数加法代码多着是,我提供的只是一种的思路。

你可能感兴趣的:(c语言)