私信TA

用户名:tjt777

访问量:5179

签 名:

人不活一个点,人活起伏

等  级
排  名 2322
经  验 2358
参赛次数 1
文章发表 10
年  龄 0
在职情况 学生
学  校 泰州学院
专  业 计算机科学与技术

  自我简介:

燃烧

解题思路:

小学二年纪的加法运算还记得不?就是那个列竖式计算(如下图),原理就是这个,只不过列竖式计算的时候从左到右是从高位到地位,例如234(2是百位,4是个位),而现在这个题的原理是从左到右是从低位到高位(为了方便数组运算),例如234(实际4是百位,2是个位);用两个数组存放两个大数,这个的话两个数组相加a[0]+b[0]就是两个数的个位相加,a[1]+b[1]就是两个数的十位相加,再用一个变量记录进位,进位参与下一位的计算,依次运算下去,就解决了

注意事项:

QQ图片.png


参考代码:

#include<stdio.h>
#include<string.h>
#define MAX 101
char a[MAX];//用字符数组存储大数
char b[MAX];
int a1[MAX]={0};//把char类型转换成整形,便于计算,并全赋值为0,便于下边计算
int b1[MAX]={0};
int c[MAX];//存储最终结果
int len1,len2;
void s1()
{
	int i;
	scanf("%s",a);
	scanf("%s",b);
	len1=strlen(a);//求数组长度
	len2=strlen(b);
	for(i=0;i<len1;i++)
	{
		a1[i]=a[len1-i-1]-'0';//高低位变换
	}
	for(i=0;i<len2;i++)
	{
		b1[i]=b[len2-i-1]-'0';
	}
}
int main()
{
	s1();
	int i;
	int k=0,t,m;//k用来存储进位,进位参与下一位的计算,例如十位的进位参与百位的计算
	for(i=0;i<MAX;i++)
	{
		t=a1[i]+b1[i]+k;//t存储运算结果
		c[i]=t%10;
		k=t/10;
	}
	m=MAX-1;
	while(c[m]==0)//,从后往前遍历数组,m记录数组中最后一个不为0的数
	{
		m--;
	}
	for(i=m;i>=0;i--)//反向输出,高低位变换,即为结果!
	{
		printf("%d",c[i]);
	}
}


 

0.0分

0 人评分

  评论区

  • «
  • »