华为机试

<img src="https://img-blog.csdn.net/20140921085726343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGFkeGFk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" style="font-family: Arial, Helvetica, sans-serif;" alt="" />
<pre name="code" class="objc">#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define maxsize 100
int jinwei = 0;
int flag1 = 0;

void comflag1(int len,int flag,char (*str)[maxsize])
{	
	int temp1 = 0;
	if(len == 0)
	{
		flag1 = 2;
		return;
	}
	for(int i=0;i<=flag;i++)
	{
		if(str[i][len] && (str[i][0] == '+'))
		{
			temp1 += (int)(str[i][len] - '0' );
		}
		if(str[i][len] && (str[i][0] == '-'))
		{
			temp1 -= (int)(str[i][len] - '0' );
		}
	}
		if(temp1<0)
		{
			flag1 = 1;
			return;
		}
		else if(temp1 == 0)
		{
			len -= 1;
			comflag1(len,flag,str);
		}
		else
		{
			flag1 = 0;
			return;
		}
}

int main()
{
	int flag = 0;
	int temp = 0;
	char *p;
	char num[maxsize] ="";
	char str[maxsize][maxsize] = {""};
	if(!(p = (char *)malloc(100)))
		exit(0);
	fgets(p,100,stdin);
	/*提取字符串*/
	for(int i=0;i<strlen(p);i++)
	{	
		num[i] = p[i];
		if(p[i] == ' ')
		{
			int j = 1;
			int n = i - 1;
			if(num[temp] == '-')
			{
				str[flag][0]= '-';
				temp += 1;
			}
			else str[flag][0]= '+';
			for(n;n>=temp;n--)
			{
				str[flag][j]= num[n];
				j++;
			}
			temp = i + 1;
			flag +=1;
		}
		if(p[i] == '.')
		{
			int j = 1;
			int n = i - 1;
			if(num[temp] == '-')
			{
				str[flag][0]= '-';
				temp += 1;
			}
			else str[flag][0]= '+';
			for(n;n>=temp;n--)
			{
				str[flag][j]= num[n];
				j++;
			}
			for(i;i<strlen(p);i++)
			{
				if(p[i] == ' ')
				{
					temp = i + 1;
					flag += 1;
					break;
				}
				if(p[i] == '\n')
				{
					flag1 = 1; 
					break;
				}
			}
		}
		if((p[i] == '\n')&& (flag1 == 0))
		{
			int j = 1;
			int n = i - 1;
			if(num[temp] == '-')
			{
				str[flag][0]= '-';
				temp += 1;
			}
			else str[flag][0]= '+';
			for(n;n>=temp;n--)
			{
				str[flag][j]= num[n];
				j++;
			}
		}

	}
	free(p);
	memset(num, 0, sizeof(num));
	/*整数相加*/
	int len = 0;
	for(int j=0;j<=flag;j++)
	{
		len = ((len)>(strlen(str[j])))?(len):(strlen(str[j]));
	}
	len -= 1;
	int len1 = len;
	comflag1(len1--,flag,str);
	for(int j=1;j<=len;j++)
	{
		temp = 0;
		for(int i=0;i<=flag;i++)
		{	
			if(str[i][j] && (str[i][0] == '+'))
			{
				temp += (int)(str[i][j] - '0' );
			}
			if(str[i][j] && (str[i][0] == '-'))
			{
				temp -= (int)(str[i][j] - '0' );
			}
		}
		temp += jinwei;
		if(temp<0 && flag1 == 0)
		{
			num[j] = (char)( 10 + temp % 10 + '0');
			jinwei = temp / 10;
		}
		else if(temp>=0 && flag1 == 0)
		{
			num[j] = (char)(temp % 10 + '0');
			jinwei = temp / 10;
		}
		///

		else if(temp<=0 && flag1 == 1)
		{
			num[j] = (char)( 0 - temp % 10 + '0');
			jinwei = temp / 10;
		}
		else if(temp>0 && flag1 == 1)
		{
			num[j] = (char)(10 - temp % 10 + '0');
			jinwei = temp / 10 + 1;
		}
		else 
		{
			num[1] = '0';
			len = 1;
			break;
		}
			
	}
	if(jinwei)
	{
		while(jinwei)
		{
			len ++;
			num[len] = (char)(jinwei % 10 + '0');
			jinwei /= 10;
		}
	}
	if(flag1 == 1)
		printf("-");
	for(int j=len;j>=1;j--)
	{
		printf("%c",num[j]);
	}
	return 0;
}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值