#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;
}
FAFU1064 Total求和
最新推荐文章于 2024-01-18 09:12:47 发布