问题1:
/*判断一个数目是不是成对称的特点*/
bool isNum(long num)
{
int tmp = 0;
int i = num;
while(i)
{
tmp = i%10 + tmp * 10;
i = i /10;
}
return (tmp == num);
}
问题2:
编写一个函数,将输入的一串10个数字进行从小到大排序,但是要求偶数放在偶数位置上,奇数放在奇数位置上。
缺失的位置由0补齐。输入中不会有0。
输入
输入10组随机数字
输出
按照规则排序后输出样例
输入
53 8 21 43 3 7 51 62 13 68
样例输出
样例输出3 8 7 62 13 68 21 0 43 0 51 0 53
void QSort(int *a, int low, int high)
{
if (low > high) return;
int piokey = a[low];
int i = low;
int j = high;
while(i < j)
{
while(a[j] > piokey && i < j) j--;
a[i] = a[j];
while(a[i] < piokey && i < j) i++;
a[j] = a[i];
}
a[i] = piokey;
QSort(a,i+1,high);
QSort(a,low,i-1);
}
int OddEvenSort(int *a, int len, int *b)
{
QSort(a,0,len-1);
int odd = 1;
int even = 0;
int i = 0;
int blen = 0;
while ( i < len)
{
if (a[i]%2==0)
{
b[even] = a[i];
even+=2;
blen = blen > even ? blen:even;
}
else
{
b[odd] = a[i];
odd+=2;
blen = blen > odd ? blen:odd;
}
i++;
}
return blen;
}
第二题、大数求和问题描述: 两个小于128位的大数
求其和输入:1234567890987654,888888888888888
输出: 2123456779876542
void myswap(char &a, char &b)
{
char temp;
temp = a;
a = b;
b = temp;
}
void BigAdd(char *inputOne, char *inputTwo, char *outPut)
{
int lenOne = strlen(inputOne);
int lenTwo = strlen(inputTwo);
int minlen = lenOne>lenTwo?lenTwo : lenOne;
int maxlen = lenOne<lenTwo?lenTwo : lenOne;
int c = 0;
for(int i = 0; i < minlen; i++)
{
outPut[i] = (inputOne[i] + inputTwo[i] + c -2 * '0')%10 + '0';
c = (inputOne[i] + inputTwo[i] + c -2 * '0')/10;
}
if (lenOne<lenTwo)
{
for (int i = lenOne; i < lenTwo; i++)
{
outPut[i] = (inputTwo[i] + c - '0')%10 + '0';
c = (inputTwo[i] + c - '0')/10;
}
}
else
{
for (int i = lenTwo; i < lenOne; i++)
{
outPut[i] = (inputOne[i] + c - '0')%10 + '0';
c = (inputOne[i] + c - '0')/10;
}
}
if (c ==1)
{
outPut[maxlen] = '1';
outPut[++maxlen]= 0;
}
else
{
outPut[maxlen] = 0;
}
for (int i = 0; i < maxlen / 2; i++)
{
myswap(outPut[i],outPut[maxlen-i-1]);
}
puts(outPut);
}
描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值。
表达式支持如下运算:“+、-、*、/”,其中“*”和“/”的优先级要高于“+”和“-”;
不需要考虑括号,且表达式之间没有空格;
例如:对于表达式"3-2+15*2",该表达式值为31.
运行时间限制: 60 Sec
内存限制: 256 MByte
输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号和空格。
输出: 表达式的运算结果。
样例输入: 3-2+15*2
样例输出: 31
int Calc(char *exp)
{
char op[255];
int data[255];
int mapop[255];
memset(op,0,sizeof(op));
memset(data,0,sizeof(data));
memset(data,0,sizeof(mapop));
for (int i = '0'; i < '9'; i++)
mapop[i] = 1;
mapop['+'] = 2;
mapop['-'] = 2;
mapop['*'] = 3;
mapop['/'] = 3;
int len = strlen(exp);
int tp = 0;
int td = 0;
int to = 0;
int ans = 0;
for (int i = 0; i < len + 1; i++)
{
if(mapop[exp[i]] == 1)
tp = tp * 10 + exp[i] -'0';
else
{
if (mapop[exp[i]] != 1 || i == len)
data[td++] = tp;
if (mapop[op[to-1]] == 3)
{
if(op[to-1] == '*')
{
data[td-2] = data[td-2] * tp;
}
else
{
if (data[td-2] == 0)
return -1;
else
data[td-2] = data[td-2] / tp;
}
to--;
td--;
}
}
if(mapop[exp[i]] == 2 || mapop[exp[i]] == 3)
{
op[to++] = exp[i];
tp = 0;
}
}
for(int i = td-1; i >=1; i--)
{
if (op[--to] == '+')
{
ans = ans + data[i];
}
else
{
ans = ans - data[i];
}
}
return ans + data[0];
}