Hzu挑战自我


私信TA

用户名:gxhzxyjsj

访问量:98798

签 名:

2024终究会过去,期待2025!

等  级
排  名 8
经  验 27863
参赛次数 67
文章发表 157
年  龄 0
在职情况 教师
学  校 贺州学院
专  业 软件工程

  自我简介:

弱鸡一个,继续努力!

解题思路:由于是大数,所以只能用字符串保存输入的内容,然后逆序,然后再相加,再考虑进位。本题中用字符数组a,b保存输入的两个数,逆序后相加保存到整型数组c中,最后考虑进位情况。

注意事项:注意最后一次是否有进位。

参考代码:

#include <stdio.h>
#include <string.h>
#define N 1002
void reverse(char *s)  //逆序函数
{
	int len,i,j;
	char t;
	len=strlen(s);
	for(i=0,j=len-1;i<j;i++,j--)
	{
		t=s[i]; s[i]=s[j]; s[j]=t;
	}
}
int main()
{	
	char a[N]={0},b[N]={0};
	int  c[N]={0};
	int n,i,lena,lenb,lenc,jinwei;
	while(scanf("%s%s",a,b)!=EOF)
	{
		lena=strlen(a);  //求长度
		lenb=strlen(b);  
		reverse(a);      //逆序a
		reverse(b);	 //逆序b
		n=lena<lenb?lena:lenb;
		for(i=0;i<n;i++)    //相加前面部分
			c[i]=(a[i]-'0') +(b[i]-'0');
		if(lena<lenb)
			for(i=lena;i<lenb;i++)  //复制后面一段
				c[i]=b[i]-'0';
		else
			for(i=lenb;i<lena;i++)  //复制后面一段
				c[i]=a[i]-'0';		
		lenc=lena>lenb?lena:lenb;	
		jinwei=0;			
		for(i=0;i<lenc;i++)   //考虑进位情况
		{
			c[i]+=jinwei;
			jinwei=c[i]/10;
			c[i]=c[i]%10;
		}
		if(jinwei==1)    //最后一位是否有进位
		{
			lenc++;
			c[i]=1;
		}
		for(i=lenc-1;i>=0;i--)  //输出全部
			printf("%d",c[i]);
		printf("\n");		
	}
    return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »