面试题:大数加法

运行结果:

 

程序代码:

 

#include<stdio.h>
//倒序字符串
void str_rts(char *s)
{
	char*p=s;
	while(*p) p++;
	p--;
	for(;s<p;s++,p--)
	{
		*p^=*s;
		*s^=*p;
		*p^=*s;

	}
}
char b[] =
"1283461973258176325874124\
35878032743712098317867293728651279";
char a[] =
"9080202033923787772398789\
50493849938744869530984603429835934";
char c[200];

int main()
{

	char *pa=a;
	char *pb=b;
	//定义各位数的整型值存储
	int ga,gb,gc,flag=0;//flag为进位标志
	int i=0;//c中的存储位置

	printf("a=%60s\nb=%60s\n",a,b);
	//找到ab的末尾字符地址
	while(*pa) pa++;
	pa--;
	while(*pb) pb++;
	pb--;
	//按位计算 从末尾开始
	for(;a<=pa || b<=pb;pa--,pb--,i++)
	{
		if(pa>=a)//判断指针越界否
		  ga=*pa-'0';
		else
		  ga=0;//a短于b,补0
		if(pb>=b)
		  gb=*pb-'0';
		else
		  gb=0;//b短于a,补0
		gc=ga+gb+flag;
		if(gc>9)//判断是否进位
		{
			flag=1;
			gc%=10;
		}
		else
		{
			flag=0;
		}
		c[i]=gc+'0';
	}
	//判断是否溢出
	if(flag)
	  c[i++]='1';
	//给c添加结束符'\0'
	c[i]='\0';
	//倒叙
	str_rts(c);
	printf("c=%s\n",c);
	printf("i=%d\n",i);

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值