7.实现俩数字类型字符串的加法器

接收数字字符每一位相加

代码:

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

//获取一行信息
void getlines(char s[], int size)
{
	fgets(s, size, stdin);
	if (s[strlen(s) - 1] == '\n')
		s[strlen(s) - 1] = '\0';

}

//实现反转
void rever_str(char s[])
{
	int i;
	int len = strlen(s);
	char t;

	for (i = 0; i < len / 2; i++)
	{
		t = s[i];
		s[i] = s[len - 1 - i];
		s[len - 1 - i] = t;
	}
}

//累加
void add_str(char s1[], char s2[], char s3[])
{
	int i;
	int minlen = (strlen(s1) > strlen(s2)) ? strlen(s2) : strlen(s1);
	int maxlen = (strlen(s1) > strlen(s2)) ? strlen(s1) : strlen(s2);
	int tmp = 0;
	//123456
	//123

	for (i = 0; i < minlen; i++)
	{
		s3[i] = ((s1[i] - 48) + (s2[i] - 48) + tmp) % 10 + 48;
		tmp = ((s1[i] - 48) + (s2[i] - 48)) / 10;
	}

	if (strlen(s1) > strlen(s2))
	{
		if (tmp == 1)
		{
			for (i = minlen; i < maxlen; i++)
			{
				s3[i] = ((s1[i] - 48) + tmp) % 10 + 48;
				tmp = ((s1[i] - 48) + tmp) / 10;
			}
			if (tmp == 1)
				s3[i] = '1';
		}
		else
			strcat(s3, s1 + minlen);
	}
	else
	{
		if (tmp == 1)
		{
			for (i = minlen; i < maxlen; i++)
			{
				s3[i] = ((s2[i] - 48) + tmp) % 10 + 48;
				tmp = ((s2[i] - 48) + tmp) / 10;
			}
			if (tmp == 1)
				s3[i] = '1';
		
		}
		else
			strcat(s3, s2 + minlen);
	}
}
int main(int argc, char **argv)
{
	int maxlen;
	char s1[1024], s2[1024], s3[1024] = {};

	printf("please input string s1 : ");
	getlines(s1, sizeof(s1));

	printf("please input string s2 : ");
	getlines(s2, sizeof(s2));

	maxlen = strlen(s1) > strlen(s2) ? strlen(s1) : strlen(s2);

	//+ - 
	printf("s1 : %*s\n", maxlen + 1, s1);
	printf("s2 : %*s\n", maxlen + 1, s2);

	rever_str(s1);
	rever_str(s2);
    /*
	 *printf("s1 : %s\n", s1);
	 *printf("s2 : %s\n", s2);
     */
	add_str(s1, s2, s3);
	rever_str(s3);
	printf("s3 : %*s\n", maxlen + 1, s3);

	return 0;
}

运行结果:

please input string s1 : 1233
please input string s2 : 2345
s1 :  1233
s2 :  2345
s3 :  3578
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值