hdu2100Lovekey

本文介绍了一种处理两个大数相加问题的算法实现,通过字符数组存储大数,并利用逆序遍历的方式实现进位加法运算,最终将结果转换回字母形式输出。

1.题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2100

 

2.说明:

      两个大数相加的另类题目。

 

3.参考代码:

 

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[1000],str2[1000];
	int a[1000],b[1000],c[2000];
	int i,j,k,flag;
	char ch;
	int l1,l2,maxlen;
	
	while(~scanf("%s %s",str1,str2))
	{
		memset(a,0,sizeof(a));   ///初始化
		memset(b,0,sizeof(b));
		memset(c,0,sizeof(c));
		
		l1=strlen(str1);
		l2=strlen(str2);
		
		maxlen=l1>l2?l1:l2;   ///取最大的长度
		
		flag=0;
		
		k=0;
		for(i=l1-1;i>=0;i--)   ///记得逆序
			a[k++]=str1[i]-65;
		
		k=0;
		for(i=l2-1;i>=0;i--)   ///记得逆序
			b[k++]=str2[i]-65;
		
		for(i=0;i<maxlen;i++)
		{
			c[i]+=(a[i]+b[i]);   ///相加
			
			if(c[i]>25)   ///进位思想
			{
				c[i+1]++;
				c[i]%=26;
			}
		}
		
		i=2000;
		while(i--)
		{
			if(c[i])
				break;
		}
		
		for(;i>=0;i--)
		{
			for(j=0;j<=25;j++)
			{
				if(c[i]==j)
				{
					flag=1;
					ch=j+65;
					printf("%c",ch);
				}
			}
		}
		
		if(flag==0)   ///如果2个全是A,则结果为一个A
			printf("A");
		
		printf("\n");
	}
	
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值