FAFU1064 Total求和

#include <iostream>
using namespace std;

#define TEMP_LEN 110 
char ans[256];
char str[512];
char temp[TEMP_LEN]; 
 
 void reverse_string(char * str)
{
	//把字符串str倒置 
	int len = strlen(str);
	for(int i = 0; i<len/2; i++)
	{
		str[i] = str[i] + str[len-1-i];
		str[len-1-i] = str[i] - str[len-1-i];
		str[i] = str[i] - str[len-1-i];
	}
}

int get_strings_digital(char * str, char res[])
{
	//取出字符串中的第一个遇到的bignum,存到res中,返回pass掉的长度
 	//如果沒有數字了,返回总长
 	//cout << sizeof(res); 注意! 这里sizeof(res) = 4, 因为res退化为指针了 
 	memset(res, 0, TEMP_LEN);
 	int len = strlen(str);
 	int i, j = 0; 	
	for(i=0; i<len; i++)
	{
		if(str[i] >= '0' && str[i] <= '9')
			res[j++] = str[i];
		else if(j != 0)
			break;
	}
	res[j] = '\0';
	return i;
}
// abc123 x456,xy16639ghks-7890# zxy
//   6854712 
// + 1245
// ——————
//   7000812 
int add_bigNum(char * num)
{
	//将大数num加到数组ans中,返回ans的长度 
	int max_len = strlen(ans) > strlen(num)? strlen(ans) : strlen(num);
	int carry = 0;
	int temp, i;
	for(i=0; i<max_len; i++)
	{
		if(ans[i] == 0) ans[i] = '0';			
		if(num[i] == 0)	num[i] = '0';
		temp = ans[i] + num[i] + carry - '0' - '0';
		ans[i] = temp % 10 + '0';
		carry = temp / 10;		
	}
	if(carry == 1)
		ans[i] = '1';
	return i;
}

void del_SuffixZero(char * str)
{	
	bool suffix = true;
	for(int i=strlen(str)-1; i>=0; i--)
	{
		if(str[i] == '0')
			str[i] = '\0';
		else
			break;
	}
}
int main()
{
	//freopen("E:\\input.txt", "r", stdin);
	gets(str);
	int len = strlen(str);
	for(int i=0; i<len; )
	{
		i += get_strings_digital(&str[i], temp);
		reverse_string(temp);
		add_bigNum(temp);
	}
	del_SuffixZero(ans);
	reverse_string(ans);
	if(ans[0] == '\0')
		ans[0] = '0';
	cout << ans << endl; 
	return 0;
}

你可能感兴趣的:(String,include)