题目一:根据指定的分隔符分隔字符串,并输出指定的段
描述
根据指定的分隔符分隔字符串,并输出指定的段。如果指定的段超过分隔的段数,输出:NULL
举例:
AAA?BBB?CCC??2
字符串为:AAA?BBB?CCC?
分隔符为:?
指定的段为:2
字符串分割为:AAA BBB CCC共三段,第2段字符串为:BBB
输入输出格式要求
输入分隔字符串长度小于128个字符,指定的段是一个正整数。
样例
输入:AAA?BBB?CCC??2
输出:BBB
#include <iostream>
#include <Windows.h>
using namespace std;
void spliteStr()
{
char str[100];
cin>>str;
char* strTmp = str;
char *strStart = strchr(strTmp, '?');
strStart++;
char *strEnd = strchr(strStart, '?');
int len = strEnd - strStart;
while(len != 0){
cout<<*strStart;
strStart++;
len--;
}
cout<<endl;
}
int main()
{
spliteStr();
system("pause");
return 0;
}
题目二:输入若干整数,输出其中能被这些整数中其他元素整除的那些元素
描述
输入一组大于0小于1000的整数,且均不相同,逗号隔开,输出其中能被这些整数中其他元素整除的那些元素。
输入输出格式要求
输入要求同上述描述,输出要求整数顺序按照输入时的顺序输出。
样例
输入:2,4,6,8,10,12,3,9
输出:4,6,8,10,12,9
#include <iostream>
using namespace std;
int main()
{
int a[100],b[100],tempIn,i,k;
char c = '0';
i = 0;
while(c != '\n'){
scanf("%d",&tempIn);
a[i] = tempIn;
i++;
scanf("%c",&c);;
}
i--;
k = 0;
while(i > 0){
for(int j = 0; j < i; j++){
if(a[i] % a[j] == 0){
b[k] = a[i];
k++;
break;
}
}
i--;
}
for(int j = k-1; j >= 0; j--){
cout<<b[j];
if(j != 0)
cout<<",";
}
cout<<endl;
system("pause");
return 0;
}
题目三:大数求余
描述
输入两个超长整型构成的字符串,使用空格隔开,求前者除以后者的余数。
输入输出格式要求
输入的每个字符串最大长度为100个字符,输出为余数值,如果结果异常输出NULL
样例
输入:123456789 23456789
输出:6172844
#include <iostream>
using namespace std;
char *aModb(char *a, char *b)
{
int lenb = strlen(b);
int lena,i,j,k,temp,temp2;
char *t = a;
while((lena = strlen(a)) > lenb ||
lena == lenb && strcmp(a,b) >= 0){
for(i=lena-1,j=lenb-1; j >= 0;){
a[i--] -= (b[j--] - '0');
}
for(int pr=lena-1; pr > 0; pr--){
if(a[pr] < '0'){
a[pr] += 10;
a[pr-1] -= 1;
}
}
while(*a == '0') a++;
}
return a;
}
int main()
{
char stra[1000] = {0}, strb[1000] = {0};
char c;
int tag = 0,i=0,j=0;
while(c != '\n'){
scanf("%c", &c);
if(c != ' ' && tag == 0){
stra[i++] = c;
}
if(c == ' ')
tag = 1;
if(c != ' ' && tag == 1){
strb[j++] = c;
}
}
strb[j-1]='\0';
cout<<aModb(stra, strb)<<endl;
system("pause");
return 0;
}