Description
给定一个正整数,在中间添加一个加号,要求得到的加法式子的结果最小。
Input
输入的第一行是一个整数T(T <= 60),代表输入数据的组数。每组数据是一个整数N,N至少2位,最多8位,且不含0。
Output
对于每组数据,输出可能得到的最小和。
Example
Input
3
19
217
5123
Output
10
19
74
思路
两个点:
1. string转int : stoi(string)
(c++中) 或者 atoi(const char *)
(c中)
2. string指定范围初始化: string s(s1, pos, len)
表示从s1的pos位置取len个字符拷贝到s中
代码
#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int len;
cin >> len;
string str;
int numlen;
for (int i = 0; i < len; i++){
cin >> str;
numlen = str.size();
if (numlen % 2 == 0){
string tmp1(str, 0, numlen/2);//string指定长度的构造方式
string tmp2(str, numlen/2, numlen / 2);
int i1 = stoi(tmp1);//string
int i2 = stoi(tmp2);
cout << i1 + i2 << endl;
}else{
string tmp1(str, 0, numlen / 2);
string tmp2(str, numlen / 2, numlen / 2+1);
int i1 = stoi(tmp1);
int i2 = stoi(tmp2);
string tmp3(str, 0, numlen / 2+1);
string tmp4(str, numlen / 2, numlen / 2);
int i3 = stoi(tmp1);
int i4 = stoi(tmp2);
cout << max(i1 + i2, i3 + i4) << endl;
}
}
system("pause");
return 0;
}